当 Docker 容器网络不通时,可以按照以下步骤进行排查和解决:
docker ps -a
确认容器处于运行状态(STATUS为Up)
docker inspect <容器ID> | grep -i network
查看容器分配的网络模式、IP地址等信息
docker network ls
docker inspect <网络ID>
常见问题:
- 使用--net=host
时可能端口冲突
- 自定义网络配置可能有误
进入容器测试网络:
docker exec -it <容器ID> /bin/bash
然后在容器内执行:
ping 8.8.8.8 # 测试外网连通性
ping <宿主机IP> # 测试宿主机连通性
ping <其他容器IP> # 测试容器间连通性
curl <网址> # 测试HTTP连接
可能原因: - 宿主机网络配置问题 - Docker DNS配置问题 - iptables规则阻止
解决方案:
# 检查DNS配置
docker run --rm busybox nslookup google.com
# 重启Docker服务
sudo systemctl restart docker
# 检查iptables规则
sudo iptables -L -n
可能原因: - 不在同一网络 - 防火墙阻止
解决方案:
# 创建自定义网络并将容器加入
docker network create my-network
docker network connect my-network <容器1>
docker network connect my-network <容器2>
可能原因: - 端口未正确映射 - 容器服务未监听正确接口
解决方案:
# 检查端口映射
docker port <容器ID>
# 确保容器内服务监听0.0.0.0而非127.0.0.1
# 检查网络接口
ip a
# 检查路由表
route -n
# 使用tcpdump抓包
docker run --rm --net=host nicolaka/netshoot tcpdump -i eth0
# 使用netshoot工具箱进行全面排查
docker run --rm -it --net container:<问题容器ID> nicolaka/netshoot
通过以上步骤,应该能够定位并解决大多数Docker容器网络不通的问题。