先检查容器网络模式和 IP 分配,使用 docker inspect 查看 networkmode 和 IPAddress;无 IP 时重启 Docker 服务;再验证容器间连通性,确保在同一自定义 bridge 网络并排查 iptable s 或 防火墙 限制;接着检查 端口 映射与外部访问,用 docker port 和 netstat 确认监听状态,开放宿主机防火墙端口;最后排查 DNS 问题,检查 /etc/resolv.conf,通过 –dns或 daemon.json 配置可靠 DNS;按层次依次排查可解决大多数网络故障。

容器 网络问题 常常导致服务无法访问、跨容器通信失败或 DNS 解析异常。在 Linux 环境下排查 Docker 网络故障,需要从宿主机、容器、网络配置和 DNS 等多个层面逐步分析。下面介绍一套实用的调试流程和 工具,帮助快速定位并解决问题。
检查容器网络模式和 IP 分配
每个容器都有独立的网络命名空间,其网络行为受启动时指定的网络模式影响。常见的有 bridge、host、none 和自定义网络。
先查看容器使用的网络模式:
- docker inspect 容器名 | grep -i networkmode —— 查看网络模式
- docker inspect 容器名 | grep -A 5 IPAddress —— 查看 IP 地址
如果容器没有 IP 地址,可能是 Docker daemon 的 IPAM(IP 地址管理)出错,或者桥接接口(如 docker0)异常。可尝试重启 Docker 服务:
sudo systemctl restart docker
验证容器间连通性
若多个容器部署在同一 bridge 网络中,应能通过内网 IP 直接通信。
- 进入源容器:docker exec -it 容器 A sh
- 使用 ping 测试目标容器 IP:ping 目标容器 IP
如果 ping 不通,检查以下几点:
- 两个容器是否在同一个自定义 bridge 网络?默认 bridge 不支持自动 DNS 解析
- 是否启用了 iptables 规则阻止流量?可用 iptables -L -n 查看
- 是否存在 防火墙 或 SELinux 限制(尤其在 CentOS/RHEL 上)
推荐使用自定义 bridge 网络,支持自动 DNS 解析:
docker network create mynet
docker run –network=mynet –name container1 …
检查 端口 映射和外部访问
宿主机无法访问容器服务,常因端口未正确映射或监听地址错误。
若仍失败,使用 netstat 检查容器内部监听状态:
docker exec 容器名 netstat -tuln | grep 端口
同时确认宿主机防火墙放行对应端口:
sudo firewall-cmd –list-ports(Firewalld)
sudo ufw status(Ubuntu)
排查 DNS 和 域名 解析问题
容器内无法访问外网域名,通常是 DNS 配置错误。
- 进入容器执行:cat /etc/resolv.conf
- Docker 默认使用宿主机的 DNS,也可通过 –dns 参数指定
若 resolv.conf 中 DNS 服务器不可达,会导致 apt、curl 等命令失败。启动容器时指定可靠 DNS:
docker run –dns 8.8.8.8 –dns 114.114.114.114 …
也可在 daemon.json 中设置全局 DNS:
/etc/docker/daemon.json
{“dns”: [“8.8.8.8”, “114.114.114.114”] }
修改后需重启 Docker 生效。
基本上就这些。掌握 inspect、exec、netstat、iptables 和 DNS 配置,大多数容器网络问题都能定位。关键是按层次排查:先容器内部,再网络连接,最后外部映射和防火墙。不复杂但容易忽略细节。