Docker容器无法对外发起HTTP请求及容器间通信异常排查求助
Docker容器网络阻塞排查指南
问题概述
新搭建的Ubuntu 22.04.1服务器,使用Docker版本20.10.21,镜像由旧Ubuntu 20.04服务器上正常运行的Dockerfile构建。但新环境出现以下异常:
- 容器内部无法访问外部网络(如执行
wget google.com能解析IP,但连接过程一直挂起) - 外部无法访问容器提供的服务
- 同一自定义桥接网络
docker.mynet内,反向代理容器无法访问应用容器 - 特殊现象:container1可正常对外发起请求,container2在旧服务器运行正常,但新服务器上不行
用到的网络配置
创建自定义桥接网络:
docker network create docker.mynet --driver bridge
为container1连接网络:
docker network connect docker.mynet container1
启动并连接container2:
docker run --name container2 -d -p 8485:8080 \ --network docker.mynet \ $IMAGE:$VERSION
排查步骤
1. 验证基础网络连通性
- 在新服务器宿主机执行
wget google.com,先排除宿主机本身网络故障 - 进入container2,用
ip route show查看默认网关,再ping该网关,确认能否连通Docker网桥网关 - 对比container1和container2的网络配置:执行
docker inspect container1和docker inspect container2,查看NetworkSettings下的IP、网关、DNS配置是否一致
2. 检查Docker网桥与iptables规则
- 查看Docker网桥状态:
ip link show docker0和ip link show br-<网络ID>(网络ID通过docker network ls查询),确认网桥已正常启动 - 检查iptables的nat表规则:
iptables -t nat -L -n,确认存在DOCKER链,且自定义网桥的SNAT规则已配置(负责容器出站流量的地址转换) - 查看新服务器ufw防火墙状态:
ufw status,若开启,确认是否允许Docker相关端口及网桥流量通过,可临时关闭ufw测试是否恢复正常
3. 排查DNS与路由配置
- 在container2内查看
/etc/resolv.conf,对比container1的DNS配置,确认使用了正确的DNS服务器(如宿主机DNS或公共DNS) - 测试容器内DNS解析稳定性:
nslookup google.com,即使解析已成功,也需确认无间歇性异常 - 检查宿主机路由表:
ip route show,确保Docker网桥的路由条目存在,且默认路由配置正常
4. 检查Docker daemon配置与版本兼容性
- 查看Docker daemon配置文件
/etc/docker/daemon.json,确认是否有自定义网络配置(如bip、dns等),对比旧服务器配置找差异 - 检查Docker服务状态:
systemctl status docker,查看是否有异常日志,可尝试重启Docker服务:systemctl restart docker - 考虑Ubuntu 22.04与Docker 20.10.21的兼容性,尝试升级Docker到较新版本(如24.x系列)测试
5. 排查容器镜像与启动参数
- 对比container1和container2的启动参数,确认是否有网络相关限制(如
--cap-drop、--security-opt等参数) - 重新构建镜像(即使Dockerfile相同,新环境构建缓存可能存在差异),用新镜像启动container2测试
- 拉取官方镜像(如
ubuntu:22.04)启动临时容器,加入docker.mynet网络测试连通性,排除自定义镜像的问题
6. 检查内核与网络模块
- 查看新服务器内核版本:
uname -r,对比旧服务器确认内核网络模块是否存在差异 - 检查必要内核模块是否加载:
lsmod | grep br_netfilter、lsmod | grep ip_tables,未加载则手动加载:modprobe br_netfilter、modprobe ip_tables - 检查sysctl网络参数:
sysctl net.ipv4.ip_forward,确认值为1(Docker需开启IP转发),若不是则执行sysctl -w net.ipv4.ip_forward=1,并写入/etc/sysctl.conf永久生效
内容的提问来源于stack exchange,提问作者not2savvy
相关产品推荐
相关产品推荐

