首页 > 解决方案 > 如何连接到 docker 容器内的 SQL Server 数据库?

问题描述

我使用以下命令创建了一个 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 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)(Microsoft SQL Server,错误:53)


找不到网络路径

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

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

标签: sql-serverdockerssms

解决方案


如果您在带有 Linux 容器的 Windows 上使用 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 命令行选项、设置 ACCEPT_EULA 环境变量或使用 mssql-conf 工具来接受 EULA。

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


推荐阅读