powershell - Docker run 和 sqlcmd 一起出现错误

标签 powershell docker sqlcmd sql-server-linux

编写一个脚本,在 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-SqlCmdSqlCmd、cmdlet,并将它们放在我在此处调用的另一个文件中;他们都给出相同的错误。

最佳答案

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

关于powershell - Docker run 和 sqlcmd 一起出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51986818/

相关文章:

powershell - 使用参数 ("By Reference"参数从 PowerShell 返回对象)?

powershell - 在PowerShell中选择字符串cmdlet。解析括号

.net - Select-String如何读取文本文件内容?大块?

powershell - Powershell-从具有AD属性的组中删除成员

linux - WSL2 Docker Linux 卷权限问题

reactjs - react ,nginx 反向代理和 docker 给出 404

amazon-web-services - docker 最适合生产环境吗?

sql - sqlcmd错误处理

xml - 使用 sqlcmd ":r"将 XML 文件的内容获取到变量中

visual-studio - Database Project 和 SQLCMD 做一个比较