容器网络不通是微服务故障排查中最常见的挑战之一。在 Java 环境中问题可能表现为服务间调用超时、数据库连接失败、消息队列连不上等。系统化地排查网络问题需要自上而下从应用层到底层网络逐层验证。一、容器网络模型与常见故障点理解 Docker 网络模型是排查的基础。不同的网络模式Bridge、Overlay、Host 等有不同的数据路径故障点也不同。容器网络故障排查模型网络模式Bridge (默认) - docker0网桥Host - 共享宿主机网络栈Overlay - 跨主机VXLANMacvlan/Ipvlan - 直接使用物理网络数据包路径容器内部 → veth pair → 网桥 → iptables → 宿主机路由外部访问容器: 宿主机端口映射 → DNAT → 网桥 → 容器常见故障点容器内DNS解析失败、路由缺失、端口未监听宿主机iptables规则错误、ip_forward未开启Docker网络网桥故障、IP冲突、端口映射冲突跨主机Overlay网络隧道问题、防火墙、MTU应用层Java连接池耗尽、DNS缓存、服务名解析错误二、系统化排查流程当发现容器网络不通时不应盲目尝试而应沿着数据包可能经过的路径逐层验证定位故障段。接口/IP/路由DNS解析同一Bridge网络不通通端口映射不通通OverlayMacvlan不同网络解析失败网络不通容器内部检查ip addr, ip routenslookup / dig容器间通信?测试 ping 其他容器IP检查iptables规则、网桥外部访问容器?检查宿主机端口监听验证DNAT规则检查宿主机防火墙ip_forward设置跨主机通信?检查VXLAN隧道键值存储连接节点间连通性检查物理交换机VLAN配置容器多网络连接路由策略检查/etc/resolv.confDocker DNS 127.0.0.11验证DNS服务可达三、关键检查点与理论原理每个排查步骤背后都有相应的内核或 Docker 机制理解这些原理能快速定位问题。排查点理论依据常见异常容器网络接口每个容器默认有一个eth0接口通过 veth pair 连接到宿主机网桥。接口未获取 IP或 IP 与网关不在同一子网。路由表容器内有默认路由指向网关通常是网桥 IP172.17.0.1。缺少默认路由导致跨子网通信失败。DNS 解析Docker 内置 DNS 服务器在127.0.0.11容器/etc/resolv.conf指向它。配置错误、DNS 服务崩溃、服务名解析为错误 IP。iptables / NATDocker 通过 iptables 实现端口映射DNAT/SNAT、跨网络转发和访问控制。规则被其他工具修改、DOCKER 链缺失、FORWARD 策略为 DROP。ip_forward宿主机必须开启 IP 转发才能让容器访问外网或跨网段通信。关闭时容器只能访问同网段。网桥与 vethdocker0或自定义网桥负责同一网络内容器交换veth pair 是容器和宿主机之间的管道。网桥不工作、veth 一端未正确连接。Overlay 网络跨主机使用 VXLAN 封装依赖键值存储Consul/Etcd同步节点信息和网络状态。节点间 UDP 4789 端口不通、MTU 过大未分片、键值存储不可达。服务发现 (Swarm)Swarm 通过内置 DNS 和 VIP 实现服务负载均衡。VIP 规则未更新、服务副本全部不健康。四、与 Java 应用的关联对于 Java 容器网络问题可能表现为以下特异性症状DNS 缓存JVM 默认缓存 DNS 解析结果networkaddress.cache.ttl可能导致容器 IP 变化后仍连接旧 IP。可调整 TTL 或使用-Dnetworkaddress.cache.ttl0禁用缓存。连接超时操作系统层面的tcp_syn_retries和 Java 的connect timeout配合默认情况下连接建立可能因网络丢包而长时间挂起。合理设置超时可快速失败。HTTP 客户端池Spring RestTemplate 或 WebClient 默认使用连接池连接池耗尽会导致请求排队等待看起来像网络不通。服务名解析Spring Boot 中若使用服务名而非 IP依赖 Docker DNS。若自定义网络设置不正确容器间的服务名无法解析。TLS/SSL 握手跨容器 https 调用需要信任证书证书不匹配会被误认为网络不通实为应用层错误。五、常用排查工具及其原理ip addr / ip route查看网络接口和路由表确认容器拥有有效 IP 和默认路由。ping测试三层连通性使用 ICMP 协议需注意部分容器或防火墙可能禁用 ICMP。traceroute追踪数据包路径帮助定位是在哪一跳丢失。nslookup / dig测试 DNS 解析直接向 Docker 内置 DNS127.0.0.11或外部 DNS 发送查询。tcpdump在宿主机或容器内抓包分析数据包是否到达、是否被丢弃、NAT 转换是否正确。例如在宿主机docker0网桥或veth上抓包。iptables -L -n -t nat查看 NAT 规则确认端口映射和 DNAT 是否存在、正确。docker inspect查看容器网络配置详情包括网关、IP、Mac 地址、端口映射。docker network inspect查看网络详细信息包括连接的容器、子网、驱动类型。六、思维导图总结容器网络不通排查自上而下排查应用层: 端口监听、TLS、连接池传输层: TCP连接超时、端口占用网络层: IP地址、路由、DNS数据链路层: ARP、网桥、veth分层检查容器内部: ip addr, ip route, resolv.conf宿主机: docker0, iptables, ip_forwardDocker: 网络驱动、端口映射、Overlay跨主机: VXLAN、防火墙、MTUJava 特殊点DNS缓存 -Dnetworkaddress.cache.ttl连接超时、连接池服务名解析失败工具链ping, traceroute, nslookuptcpdump 抓包分析docker inspect, iptables总结排查容器网络问题需要按照从内到外、从应用到物理的层次化思路逐一验证容器网络栈、Docker 网络机制、宿主机内核参数及跨主机通信。对于 Java 容器还需关注 JVM 的 DNS 缓存和连接超时等特性。在高级面试中系统化地阐述这一排查流程并准确指出各层的核心检测点和工具能充分体现你在容器化运维和分布式系统故障诊断方面的深厚功底。