Docker网桥模式网络不通排错详解
一、问题现象
使用Docker默认的网桥模式(bridge)启动容器后,发现容器无法与宿主机或其他容器通信,常见表现为:ping不通网关、无法访问外部网络、容器间端口不通等。
二、基础排查步骤
1. 检查容器网络配置
首先确认容器IP分配是否正常:
docker exec -it ip addr查看容器内IP地址。- 默认网桥 docker0 的子网通常为
172.17.0.0/16,若容器未获取到合法IP,可能网桥或DHCP异常。
2. 测试网关连通性
在容器内执行 ping 172.17.0.1(即docker0网关),若不成功,检查宿主机网桥状态。
三、宿主机层面排错
1. 确认docker0网桥存在且UP
运行 ip link show docker0 查看网桥状态,若不存在则需重新创建或重启Docker服务。
2. 检查iptables规则
Docker依赖iptables做NAT和包转发。检查以下规则:
iptables -t nat -L -n | grep 172.17.0.0/16确认MASQUERADE规则存在。iptables -L FORWARD -n确认FORWARD链策略允许转发(通常为ACCEPT)。- 若策略为DROP,需添加规则:
iptables -A FORWARD -i docker0 -o docker0 -j ACCEPT。
3. 检查IP转发配置
执行 sysctl net.ipv4.ip_forward 确保值为1,否则临时启用:sysctl -w net.ipv4.ip_forward=1,并写入/etc/sysctl.conf永久生效。
四、防火墙与安全组干扰
云服务器或物理机上的 firewalld、ufw 等防火墙可能阻止Docker流量。建议暂时关闭测试:
- CentOS:
systemctl stop firewalld - Ubuntu:
ufw disable
若确认是防火墙导致,需放行docker0网桥的相关规则。
五、端口映射问题
若容器内服务监听在localhost(127.0.0.1),外部无法访问。检查容器内进程绑定地址:netstat -tlnp,应改为 0.0.0.0 或指定IP。
六、其他可能原因
物理网卡混杂模式:某些环境需开启混杂模式才能桥接通信。
SELinux:有时SELinux会阻止容器网络,可临时设置为permissive测试。
Docker版本/配置:检查 daemon.json 中是否自定义了bip或固定IP,可能造成IP冲突。
七、总结
网桥模式网络不通通常由 iptables规则异常、IP转发未开启、防火墙拦截 或 网桥配置错误 导致。按以上步骤逐层排查,配合 tcpdump 抓包分析,可快速定位问题。