我有一个问题跟随[本教程](https://hub.docker.com/r/microsoft/mssql-server-linux/ )我尝试通过sqlcmd连接到我的docker托管的MSSQL。
我在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:错误:用于SQL Server的Microsoft ODBC驱动程序17:登录超时 过期。 Sqlcmd:错误:用于SQL Server的Microsoft ODBC驱动程序17:TCP 提供者:错误代码0x2749。 Sqlcmd:错误:Microsoft ODBC驱动程序17 对于SQL Server:与网络相关或特定于实例的错误 在建立与SQL Server的连接时发生。服务器不是 发现或无法访问。检查实例名称是否正确以及SQL是否正确 服务器配置为允许远程连接。欲获得更多信息 请参阅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
注意:192.168.0.110(通过在主机中运行ipconfig来获取此信息。)
有任何帮助吗?
答案 0 :(得分:1)
我在经过一些试验和错误之后发现了问题,并重新阅读了这些文件。当我在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运行这些命令,请使用双引号而不是单引号。
E.g。
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登录:
答案 1 :(得分:0)
docker run
命令语法如下:
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
执行命令时:
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
/bin/bash
最终会覆盖Dockerfile microsoft/mssql-server-linux图片categorical
中定义的CMD
图层。
所以,最后只需启动一个没有任何附加命令的容器:
$ docker run -e 'ACCEPT_EULA=Y' --name mssql -e 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -it -d microsoft/mssql-server-linux:latest
现在您可以访问MSSQL
:
$ docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'yourStrong(!)Password'
1>
答案 2 :(得分:0)
尝试使用127.0.0.1代替localhost
例如:
docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U sa -P 'yourStrong(!)Password'
答案 3 :(得分:0)
我是 Docker 的新手,当我尝试从也在另一个 Docker 容器中运行的应用程序(或 Microsoft 的 sqlcmd 应用程序容器)连接到 SQL Server 容器时,我也遇到了同样的问题。看起来每个容器都有自己的子网 IP 地址,因此如果您尝试从另一个容器连接到 SQL,“localhost”将永远无法工作。 下面的命令将为您提供桥接网络中 IP 地址的完整列表。可以直接在连接字符串中指定IP。
docker network inspect bridge
答案 4 :(得分:-1)
从您的消息中看,服务器未配置为远程访问。你能按照下面提到的方式启用吗?
使用SSMS(SQL Server Management studio): 在对象资源管理器中,右键单击服务器,然后选择“属性”。
单击Connections节点。
在“远程服务器连接”下,选中“允许与此服务器的远程连接”复选框。
谢谢,
Ananda Kumar J。