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

Ubuntu 18.04下Docker容器连接宿主机本地MS SQL Server失败怎么办?

Ubuntu 平台的Docker服务默认没有内置host.docker.internal域名的解析规则,这是Windows/macOS版Docker的专属特性,这是你首次启动报错的核心原因。

方案1:使用默认桥接网络(推荐,网络隔离性更好)

  • 第一步:调整容器启动命令,手动添加宿主机域名映射,修改后的启动命令如下:
docker run -d -p 228:80/tcp --add-host=host.docker.internal:host-gateway myrepos/myproject

这个参数会自动把host.docker.internal解析到Docker网桥对应的宿主机IP,不需要修改现有连接字符串。

  • 第二步:确认SQL Server监听配置
    检查SQL Server的TCP/IP监听地址,确保不是仅绑定127.0.0.1,需要修改为绑定0.0.0.0或者包含Docker网桥网段(默认是172.17.0.0/16),修改后重启SQL Server服务生效。
  • 第三步:放行防火墙端口
    执行以下命令开放1433端口的访问权限:
ufw allow 1433/tcp

如果需要更严格的规则,可以只放行Docker网段:

ufw allow in from 172.17.0.0/16 to any port 1433

方案2:使用host网络模式

如果你坚持使用--network=host参数启动容器,按以下步骤检查:

  • 连接字符串调整为:Server=127.0.0.1,1433;User ID=SA;Password=mypass;Database=mydb
  • 确认SQL Server已开启远程连接权限:登录SQL Server后进入服务器属性,在「连接」选项卡下勾选「允许远程连接到此服务器」,重启服务生效。
  • 确认SQL Server的TCP端口固定为1433:SQL Server Express默认会启用动态端口,需要在SQL Server配置管理器的TCP/IP属性中,把IPAll分类下的「TCP动态端口」留空,「TCP端口」填1433,重启后生效。

网络连通性验证

配置完成后可以先通过工具验证网络是否通畅,避免反复重启应用排查:

  1. 先在宿主机执行以下命令,确认SQL Server端口正常监听:
nc -zv 127.0.0.1 1433
  1. 再启动临时容器验证容器到宿主机的网络连通性:
# 桥接网络场景验证
docker run --rm --add-host=host.docker.internal:host-gateway alpine sh -c "apk add --no-cache netcat-openbsd && nc -zv host.docker.internal 1433"
# host网络场景验证
docker run --rm --network=host alpine sh -c "apk add --no-cache netcat-openbsd && nc -zv 127.0.0.1 1433"

如果验证命令返回连接成功,说明网络层面没有问题,此时再排查连接字符串的账号、密码、数据库名是否配置正确即可。

内容的提问来源于stack exchange,提问作者Иван Брайко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:45:02