【问题标题】:How to connect to a SQL Server database inside a docker container?如何连接到 docker 容器内的 SQL Server 数据库?
【发布时间】:2019-06-08 21:15:00
【问题描述】:

我使用以下命令创建了一个 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

但是我收到了这个错误:

TITLE:连接到服务器

无法连接到本地主机:。

附加信息:

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


找不到网络路径

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

我的连接字符串有问题还是不能这样连接?

【问题讨论】:

标签: sql-server docker ssms


【解决方案1】:

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

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

【讨论】:

  • 谢谢!单引号是问题
  • 如何通过 SQL Server Management Studio 连接?有什么帮助吗?
  • @Jack,一旦容器运行,您应该能够使用 localhost 作为服务器名称从 SSMS 或 ADS 连接。如果 docker run 命令上的外部端口不是默认的 1433 端口,也包括端口号,如localhost,12345
  • 非常感谢古兹曼。实际上我使用的是完全一样的,但我认为问题与重新启动 Docker 有关,之后它被修复了。
  • 您对 SQL Server 的维护计划有任何想法吗?我之前用过那个属性,但我想我至少要安装 SQL Server 代理服务和集成服务。这是真的吗?
猜你喜欢
  • 2016-11-29
  • 2018-07-28
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2019-03-26
  • 2018-01-31
相关资源
最近更新 更多