无法连接到 docker 托管的 MSSQL

csa*_*ong 5 sql-server docker

我在 [本教程]( https://hub.docker.com/r/microsoft/mssql-server-linux/ ) 之后遇到问题,我尝试通过 sqlcmd 连接到我的 docker 托管的 MSSQL。

我从 Windows 在 PowerShell 中执行了以下操作:

docker run -e 'ACCEPT_EULA=Y' --name mssql -e \
 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -it \
 -d microsoft/mssql-server-linux:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)

注意:添加“-it”和“/bin/bash”是因为如果没有检测到任何活动,docker将自动停止。

我跑去docker container ls -a验证它正在运行:

docker container Is -a 
CONTAINER ID      IMAGE                               COMMAND       CREATED          STATUS          PORTS                    NAMES 
92cfc504ab70      microsoft/mssql-server-linux:latest "/bin/bash"   27 minutes ago   Up 27 minutes   0.0.0.0:1433->1433/tcp  mssql 
Run Code Online (Sandbox Code Playgroud)

我在我的主机上运行了 telnet local-ip :1433,它工作正常。

当我执行以下操作时,问题出在:

docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa \
 -P yourStrong(!)Password
Run Code Online (Sandbox Code Playgroud)

错误:

Sqlcmd:错误:用于 SQL Server 的 Microsoft ODBC 驱动程序 17:登录超时已过期。Sqlcmd:错误:用于 SQL Server 的 Microsoft ODBC 驱动程序 17:TCP 提供程序:错误代码 0x2749。Sqlcmd:错误:Microsoft ODBC Driver 17 for SQL Server:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。

我还尝试通过我的主机链接使用 powershell 进行连接:https : //docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker

命令:

sqlcmd -S 192.168.0.110,1433 -U SA -P yourStrong(!)Password
Run Code Online (Sandbox Code Playgroud)

注意:192.168.0.110(通过在主机上运行 ipconfig 得到这个。)

有什么帮助吗?

csa*_*ong 2

经过一番尝试和错误,并重新阅读文档后,我发现了问题。当我在 PowerShell 中执行命令时,我应该对参数使用双引号。

我正在寻找错误的方向。最初我执行了命令:

docker run -e 'ACCEPT_EULA=Y' --name mssql -e \
 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -d \
 microsoft/mssql-server-linux:latest
Run Code Online (Sandbox Code Playgroud)

容器每次启动时都会自动停止。然后,我做了一些谷歌搜索并发现:

docker run -e 'ACCEPT_EULA=Y' --name mssql -e \
 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -it -d \
 microsoft/mssql-server-linux:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)

表面上看起来很好。它在 PowerShell 中成功执行。它不再自动停止。如果我使用更深入的挖掘

docker container logs mssql
Run Code Online (Sandbox Code Playgroud)

查看 mssql 的日志。没有给出错误,只是我没有看到给出的大量信息,这让我认为我的命令没有问题。

但运行这些命令的正确方法是使用双引号。链接: https: //hub.docker.com/r/microsoft/mssql-server-linux/ 重要提示:如果您在 Windows 上使用 PowerShell 来运行这些命令,请使用双引号而不是单引号。

例如

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=YourStrong!Passw0rd" -p 1401:1433 --name sql1 -d microsoft/mssql-server-linux:2017-latest
Run Code Online (Sandbox Code Playgroud)

我还可以使用 SSMS 登录:

  • 服务器名称:Hostip ,1401
  • 用户名: sa
  • 密码:你的密码