上一篇 下一篇 分享链接 返回 返回顶部

Docker网桥模式网络不通排错详解

发布人: 发布时间:10小时前 阅读量:2

一、问题现象

使用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永久生效。

四、防火墙与安全组干扰

云服务器或物理机上的 firewalldufw 等防火墙可能阻止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 抓包分析,可快速定位问题。

目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com