我在 [本教程]( 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 得到这个。)
有什么帮助吗?
经过一番尝试和错误,并重新阅读文档后,我发现了问题。当我在 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 登录:
| 归档时间: |
|
| 查看次数: |
5025 次 |
| 最近记录: |