如何连接到Docker容器内的SQL Server数据库?

时间:2019-06-07 18:54:28

标签: sql-server docker ssms

我使用以下命令创建了一个docker容器:

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=MyStr@ngPassw0rd' -e 'MSSQL_PID=Express' -p 1433:1433 -d microsoft/mssql-server-linux:latest

我想使用SSMS从我的主机连接到该数据库。 我应该在SSMS登录对话框中使用哪些参数?

我当前的条目:

  • 服务器类型:数据库引擎
  • 服务器名称:[计算机名称]
  • 身份验证:SQL Server身份验证
  • 登录:sa
  • 密码:MyStr @ ngPassw0rd

但是我遇到了这个错误:

  

标题:连接到服务器

     

无法连接到本地主机:。

     

其他信息:

     

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:命名管道提供程序,错误:40-无法打开与SQL Server的连接)(Microsoft SQL Server,错误:53)

     
     

找不到网络路径

似乎我无法“查看”数据库。

我的连接字符串有问题吗?还是无法以这种方式连接?

1 个答案:

答案 0 :(得分:2)

如果您在Windows和Linux容器上使用Docker CE,请在环境变量周围指定双引号,以便对其进行识别:

docker run -e "ACCEPT_EULA=Y" -e 'SA_PASSWORD=MyStr@ngPassw0rd" -e "MSSQL_PID=Express" -p 1433:1433 -d microsoft/mssql-server-linux:latest

您将可以使用SSMS进行连接。在这种情况下,使用默认的1433端口,可以将.localhost指定为服务器名称。您还可以从仅指定您的计算机名称的远程主机连接到容器实例(假设防火墙规则允许传入的端口1433通信)。

使用单引号引起来的值将无法识别,并且容器将立即停止。您可以使用docker logs <container-name>查看SQL Server错误日志中的消息以进行故障排除。以下是使用原始问题命令使用显式容器名称(建议使用它来简化此类任务)的示例:

docker run --name sql1 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=MyStr@ngPassw0rd' -e 'MSSQL_PID=Express' -p 1433:1433 -d microsoft/mssql-server-linux:latest
c3de002fc22106e53c9b165c7f444905b5ef1bb1596eddf1b097cdd6d60e6c75

docker logs sql1
  

必须接受SQL Server最终用户许可协议(EULA)   SQL Server可以启动之前。该产品的许可条款可以是   从http://go.microsoft.com/fwlink/?LinkId=746388下载。

     

您可以通过指定--accept-eula命令行来接受EULA   选项,设置ACCEPT_EULA环境变量或使用   mssql-conf工具。

从记录的消息中可以看到,SQL实例已停止(正在停止容器),因为SQL Server由于单引号无法识别EULA被接受。