编写一个脚本,在 Docker 容器中快速添加 SQL Server Linux 实例,然后立即连接到它进行测试。好像 run 命令和 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 : A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
但如果之后您立即注释掉 docker run 命令,它就会起作用。可以很好地连接到同一个 SQL Server:
shuriken
我尝试过 SqlServer 模块中的 Invoke-SqlCmd
、SqlCmd
、cmdlet,并将它们放在我在此处调用的另一个文件中;他们都给出相同的错误。
最佳答案
在 docker run
和 Invoke-SqlCmd
之间添加 Start-Sleep -s 4;
有效。
看起来它只是需要一些喘息的空间。
4 秒是我在查询之前可以达到的最短时间。
关于powershell - Docker run 和 sqlcmd 一起出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51986818/