插件窝 干货文章 docker 容器网络不通怎么办

docker 容器网络不通怎么办

容器 Docker 网络 宿主机 413    来源:    2025-04-27

Docker 容器网络不通问题排查指南

当 Docker 容器网络不通时,可以按照以下步骤进行排查和解决:

1. 基础检查

检查容器运行状态

docker ps -a

确认容器处于运行状态(STATUS为Up)

检查容器网络配置

docker inspect <容器ID> | grep -i network

查看容器分配的网络模式、IP地址等信息

2. 网络模式检查

确认网络模式

docker network ls
docker inspect <网络ID>

常见问题: - 使用--net=host时可能端口冲突 - 自定义网络配置可能有误

3. 容器内部网络测试

进入容器测试网络:

docker exec -it <容器ID> /bin/bash

然后在容器内执行:

ping 8.8.8.8        # 测试外网连通性
ping <宿主机IP>     # 测试宿主机连通性
ping <其他容器IP>   # 测试容器间连通性
curl <网址>         # 测试HTTP连接

4. 常见问题及解决方案

问题1:容器无法访问外网

可能原因: - 宿主机网络配置问题 - Docker DNS配置问题 - iptables规则阻止

解决方案

# 检查DNS配置
docker run --rm busybox nslookup google.com

# 重启Docker服务
sudo systemctl restart docker

# 检查iptables规则
sudo iptables -L -n

问题2:容器间无法通信

可能原因: - 不在同一网络 - 防火墙阻止

解决方案

# 创建自定义网络并将容器加入
docker network create my-network
docker network connect my-network <容器1>
docker network connect my-network <容器2>

问题3:宿主机无法访问容器

可能原因: - 端口未正确映射 - 容器服务未监听正确接口

解决方案

# 检查端口映射
docker port <容器ID>

# 确保容器内服务监听0.0.0.0而非127.0.0.1

5. 高级排查工具

# 检查网络接口
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

6. 其他可能原因

  1. Docker版本问题:尝试升级Docker到最新版本
  2. 内核模块缺失:确保加载了必要的内核模块(br_netfilter, overlay等)
  3. SELinux/AppArmor限制:临时禁用测试
  4. 网络驱动问题:尝试更换网络驱动(bridge, macvlan等)

通过以上步骤,应该能够定位并解决大多数Docker容器网络不通的问题。