You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker容器中运行SQL Server命名实例?

SQL Server 容器命名实例访问解决方案

问题根因

使用HostName\InstanceName格式连接SQL Server时,客户端会首先向目标主机的UDP 1434端口发送请求,查询对应命名实例的实际监听端口,Docker部署的SQL Server默认不会暴露该端口,也未配置SQL Server Browser服务的解析规则,因此命名实例格式的连接会失败,而直接使用HostName连接默认走TCP 1433端口所以可以正常连通。


方案1:配置端口映射与Browser服务(推荐,无需修改应用侧任何配置)

  • 停止现有SQL Server容器,重新启动时新增UDP 1434端口映射,同时指定实例名环境变量:
docker run -d -p 1433:1433 -p 1434:1434/udp \
-e "ACCEPT_EULA=Y" \
-e "SA_PASSWORD=你的SA账户密码" \
-e "MSSQL_INSTANCE_NAME=你的实际实例名" \
--name mssql_container mcr.microsoft.com/mssql/server:你使用的镜像版本
  • 进入容器开启SQL Server Browser服务:
    • 若为Linux容器:执行/opt/mssql/bin/mssql-conf set sqlservr.instance_name 你的实际实例名,重启容器后运行/opt/mssql/bin/sqlbrowser &将Browser服务后台驻留
    • 若为Windows容器:执行Set-Service -Name SQLBrowser -StartupType Automatic; Start-Service SQLBrowser即可
  • 配置完成后即可通过sqlcmd -S HostName\InstanceName正常测试连接。

方案2:配置客户端别名(适合不方便调整容器配置的场景)

如果暂时无法修改容器的端口映射规则,可以在所有运行应用的主机上配置SQL Server别名,无需修改应用连接字符串即可正常访问:

  • 打开SQL Server配置管理器,依次进入「SQL Native Client 配置」->「别名」
  • 新建别名:别名字段填写HostName\InstanceName,服务器字段填写HostName,端口填写1433,协议选择TCP/IP
  • 保存配置后应用即可直接使用原有连接字符串访问容器实例。

注意事项

  • 确保主机防火墙开放TCP 1433、UDP 1434的入站规则
  • 如果主机本身运行了其他SQL Server实例存在端口冲突,建议优先使用方案2避免端口占用问题

内容的提问来源于stack exchange,提问作者Jordi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:06:05