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

Docker容器无法连接外部主机及SQL数据库问题求助

排查Docker容器无法访问外部网络的步骤

1. 先确认宿主机网络可用性

  • 登录Ubuntu宿主机,执行 ping google.com 和 ping <SQL服务器公网IP>,验证宿主机本身能访问公网和目标SQL服务器
  • 用 telnet <SQL服务器IP> 1433(或SQL实际使用的端口)测试宿主机到SQL服务器的端口连通性,排除目标端防火墙/安全组拦截

2. 检查容器内部网络状态

  • 进入容器终端:docker exec -it <你的容器ID/名称> bash
    • 执行 ping <宿主机网关IP>(可通过docker inspect <容器ID> | grep Gateway获取网关地址),确认容器能连通宿主机
    • 执行 cat /etc/resolv.conf 查看DNS配置,若DNS异常,可手动在容器内设置 echo "nameserver 8.8.8.8" > /etc/resolv.conf 测试解析是否正常
    • 直接用SQL服务器IP尝试连接,而非域名,排除DNS解析问题

3. 检查Docker网络与宿主机防火墙

  • 查看容器网络模式:docker inspect <容器ID> | grep NetworkMode,默认bridge模式需确保docker0网桥正常运行
  • 检查Ubuntu防火墙ufw状态:ufw status,若启用,需允许Docker相关出站流量,或临时执行 ufw disable 测试是否是防火墙导致的网络阻塞
  • 确认SQL服务器的安全组/防火墙规则,已开放Ubuntu宿主机公网IP对SQL端口的访问权限(容器出站流量使用宿主机IP)

4. 调整Docker daemon配置

  • 查看 /etc/docker/daemon.json,若存在自定义DNS配置,确保其可用;若无,添加以下内容:
    {
      "dns": ["8.8.8.8", "8.8.4.4"]
    }
    
  • 重启Docker服务:systemctl restart docker,再重新启动容器测试网络

5. 排除Nginx干扰

  • 暂时停止Nginx服务:systemctl stop nginx,测试容器网络是否恢复,排除端口冲突或Nginx配置导致的间接影响

6. 验证ASP.NET应用配置

  • 确认连接字符串中SQL服务器地址为公网IP/可解析域名,而非localhost或内部局域网地址
  • 检查应用是否在Linux环境下误配置了代理,导致外部网络请求被拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:46:03