我在 [本教程]( 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
注意:添加“-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
我在我的主机上运行了 telnet local-ip:1433,它工作正常。
当我执行以下操作时,问题出在:
docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa \
-P yourStrong(!)Password
错误:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired. Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2749. Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
我还尝试通过我的主机使用 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
注意:192.168.0.110(通过在主机上运行 ipconfig 得到这个。)
有什么帮助吗?
最佳答案
经过一些试验和错误,并重新阅读文档,我发现了问题。当我在 PowerShell 中执行我的命令时,我应该对参数使用双引号。
我正在寻找错误的方向。最初我执行了命令:
docker run -e 'ACCEPT_EULA=Y' --name mssql -e \
'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -d \
microsoft/mssql-server-linux:latest
每次启动时容器都会自动停止。
然后,我做了一些谷歌搜索,发现:
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
表面上看起来还不错。它在 PowerShell 中成功执行。它不再自动停止。如果我深入挖掘使用
docker container logs mssql
查看 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
我还可以使用 SSMS 登录:
关于sql-server - 无法连接到 docker 托管的 MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686882/