首页 > 解决方案 > docker run 和 sqlcmd 一起报错

问题描述

编写一个脚本以在 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 :与服务器成功建立连接,但在登录前握手期间发生错误。(提供者:TCP 提供者,错误:0 - 现有连接被远程主机强行关闭。)

但是,如果在那之后您立即注释掉该docker run命令,它就会起作用。连接到同一个 SQL Server 就好了:

手里剑

我已经尝试了 SqlServer 模块中的Invoke-SqlCmd, SqlCmd, cmdlet 并将它们放在我在这里调用的另一个文件中;他们都给出了同样的错误。

标签: powershelldockersqlcmdsql-server-linux

解决方案


添加Start-Sleep -s 4;介于docker runInvoke-SqlCmd作品之间。看起来它只是需要一些喘息的空间。4 秒是我在查询之前可以达到的最低时间。


推荐阅读