将脚本放在一起以在docker容器中快速添加SQL Server Linux实例,然后立即连接到该实例进行测试。似乎运行命令和sqlcmd不能在同一脚本中运行。
假设您在 .ps1 文件中运行以下命令:
#create the container with sql server
docker run `
-e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Awesome1!" `
-p 11433:1433 `
--name shuriken --hostname shuriken --restart=always `
-d microsoft/mssql-server-linux:2017-latest;
#try to connect to it
$ConnectionString = "Server=localhost,11433;Database=master;User Id=sa; Password=Awesome1!";
$sql = 'SELECT @@SERVERNAME AS ServerName;';
Invoke-Sqlcmd -ConnectionString $ConnectionString -Query $sql;
您收到错误:
Invoke-Sqlcmd :已成功与 服务器,但在登录前握手期间发生错误。 (提供程序:TCP 提供程序,错误:0 - 现有连接是 被远程主机强制关闭。(
但是,如果之后您立即注释掉docker run
命令,它就可以工作。连接到同一个 SQL Server 就好了:
手里剑
我已经尝试了来自 SqlServer 模块的Invoke-SqlCmd
、SqlCmd
、 cmdlet,并将它们放在我在此处调用的另一个文件中;它们都给出相同的错误。
在docker run
和Invoke-SqlCmd
之间添加Start-Sleep -s 4;
是有效的。 看起来它只是需要一些喘息的空间。 4 秒是我在查询之前可以达到的最低时间。