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

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

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

云与容器速查云更新于 2026-10-13

容器出网失败是什么

容器访问不了外网,通常不是玄学:按『容器到宿主再到网关』逐层验证即可收敛到根因。常见原因有四类:宿主内核转发未开启、地址转换规则缺失、宿主防火墙拦截了转发链、云侧安全组限制了出方向。用同一宿主上的另一个容器做对照实验,能很快判断问题是全局的还是仅限某个容器,这一步能把排查范围直接砍掉一半。

基本信息

第一步在容器内访问网关与外网地址,区分完全不通与只有解析不正常
宿主转发需要开启内核转发,容器出网依赖宿主的转发能力
地址转换转发链上应存在地址伪装规则,缺失时出网请求直接被丢弃
宿主防火墙默认策略可能拦截转发链,导致容器流量被拦
云侧安全组出方向被限制时,表现与本地规则缺失完全一致

典型使用场景

  • 容器拉取镜像或安装依赖失败,怀疑是网络出口问题
  • 容器内调用第三方接口超时,而宿主上同样的请求正常
  • 调整宿主防火墙或内核参数之后,容器集体出现出网异常
  • 集群中只有部分节点上的容器无法出网,需要判断差异点
  • 排查时用同一宿主上的其他容器做对照,快速界定影响范围

逐层验证

逐层验证
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   # 期望值为 1
iptables -t nat -S POSTROUTING | grep -i masq   # 检查是否存在地址转换规则
# 区分场景:能解析但连不上属链路问题;连解析都失败,先修 DNS

分层排查表

层级检查项典型症状
容器内路由与 DNS 配置无法解析域名,或根本没有默认路由
容器内到网关的连通性连网关都不通,问题在容器网络配置
宿主内核转发是否开启转发关闭时同宿主所有容器一起失败
宿主地址转换与转发链规则规则缺失导致出网请求被直接丢弃
云侧安全组出方向策略本地全部正常但依然不通
用临时工具容器做对照实验很高效:同一宿主上其他容器能出网而某个容器不能,问题通常在该容器的网络配置,而不是宿主环境本身。
关闭内核转发或手工删除转发规则,会让该宿主上所有容器、乃至运行在同机的集群组件一起失去网络能力:动手前先确认影响范围,并准备好回退步骤。

易错点

  • 关闭内核转发图省事:同宿主上所有容器网络瘫痪,运行在同机的集群组件同样受影响
  • 在宿主手工删除转发规则:守护进程重启后规则会被自动重建,问题复发且现象更隐蔽
  • 只看容器内报错,不检查宿主与云侧策略,排查范围越缩越小却始终找不到根因
  • 把 DNS 问题当成出网问题:能解析但连不上和压根解析不出来,是两条完全不同的排查路径

数据来源与参考

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

相关工具

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