sql-server - 如何连接到 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 身份验证
- 登录:sa
- 密码:MyStr@ngPassw0rd
但我收到了这个错误:
标题:连接到服务器
无法连接到本地主机:。
附加信息:
建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)(Microsoft SQL Server,错误:53)
找不到网络路径
似乎我无法“看到”数据库。
我的连接字符串有问题还是无法以这种方式连接?
解决方案
如果您在带有 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 由于单引号而被接受。
推荐阅读
- android - “错误:包 DownloadTask 不存在” FileDownloader 库
- android - NDK 代码覆盖率
- apostrophe-cms - 撇号 beforeSave 不起作用
- python - python - 期望一个缩进块while循环
- android - INSTALL_PARSE_FAILED_NO_CERTIFICATES:包 /data/app/vmdl2005941423.tmp/0_base-master 在 AndroidManifest.xml 条目中没有证书。
- html - 引导按钮仅在 ios safari 和 ios chrome 上具有奇怪的行为
- c# - ASP.NET ImageButton 点击事件
- node.js - 一个对象的属性值将被用作 Handlebars/EJS 模板引擎中另一个对象的属性
- javascript - 替换 a 的文本
- 有图像
- php - 想要将 html 域添加到 $url_activation - 应该很容易吗?