首页/云/云与容器速查/容器出网失败排查(NAT/防火墙)

容器出网失败排查(NAT/防火墙)

容器访问不了外网:按 容器 → 宿主 → 网关逐层验证。常见于宿主转发关闭、iptables 规则缺失、宿主防火墙拦 FORWARD、云安全组限制。

云与容器速查云更新于 2026-10-12
第 1 步docker exec 容器 ping/curl 网关与外网,区分全断还是 DNS 问题
宿主转发sysctl net.ipv4.ip_forward=1(Docker 依赖它)
NAT 规则iptables -t nat -L POSTROUTING -n 应有 MASQUERADE
宿主防火墙ufw/firewalld 默认可能拦 FORWARD 链
云安全组出方向限制时同样表现为不通

逐层验证

逐层验证
docker exec myapp ip route
docker exec myapp curl -sS -m 5 https://www.example.com -o /dev/null -w '%{http_code}\n'
sysctl net.ipv4.ip_forward
iptables -t nat -S POSTROUTING | grep -i masq
用 netshoot 容器做对照实验:同一宿主上其他容器能出网而某个容器不能,问题通常在该容器网络配置(自定义网络/策略)而非宿主。

易错点

  • 关掉 ip_forward 图省事:所有容器网络瘫痪,还影响 K8s
  • 在宿主手工删 iptables 规则:Docker 重启后自动重建,问题复发且更隐蔽

数据来源与参考

  • Docker Docs:Networking overview
  • Linux iptables 文档(NAT)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌