无法连接到docker托管的MSSQL

时间:2018-04-06 06:41:06

标签: sql-server docker

我有一个问题跟随[本教程](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来获取此信息。)

有任何帮助吗?

5 个答案:

答案 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登录:

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

答案 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。