容器网络连通性需分层验证:先查ip与网络归属,再测外网、dns、容器间通信及宿主机互通;常用命令包括docker inspect、docker exec内ping/nslookup、docker port及宿主机curl/telnet。
测试容器网络连通性,关键不是“试一遍所有命令”,而是按逻辑分层验证:先确认容器自身网络配置是否就绪,再逐级测外网、dns、容器间通信和宿主机互通。下面这些命令在生产环境高频使用,每条都对应一个明确目标。
查容器IP和网络归属
这是排查起点,避免盲目ping错地址:
- docker inspect | grep -i "ipaddress\|networkmode" —— 快速看到容器分配的IP、所连网络名、网络模式(如bridge/host)
- docker inspect --format='{{.NetworkSettings.Networks}}' —— 查看它是否真的加入了预期网络(比如my_network),而非默认bridge
- docker network inspect —— 确认该网络的子网、网关、已连接容器列表,验证目标容器确实在其中
进容器测基础连通性
别只在宿主机上猜,必须进入容器内部执行测试:
-
docker exec -it sh(或bash),然后运行:
ping -c 3 8.8.8.8 —— 测试能否访问外网(排除NAT/iptables问题)
ping -c 3 —— 若用自定义网络,可直接用服务名ping(验证DNS+网络发现)
ping -c 3 —— 绕过DNS,直测三层连通性 - 如果容器没装ping,可用apk add --no-cache iputils(Alpine)或apt update && apt install -y iputils-ping(Debian/Ubuntu)临时安装
验证DNS和服务发现
很多“连不通”其实是域名解析失败,不是网络不通:
- docker exec cat /etc/resolv.conf —— 检查DNS服务器是否为Docker内置(127.0.0.11)或被覆盖
- docker exec nslookup (如redis、db)—— 看能否解析成容器IP
- 若nslookup失败但IP能ping通,说明DNS配置异常;可临时用--dns 8.8.8.8启动容器测试
检查端口映射与宿主机访问
外部访问不到容器服务?不一定是容器内问题:
- docker port —— 查看-p参数是否生效,输出类似 8080/tcp -> 0.0.0.0:3000,确认端口已绑定到宿主机
- 在宿主机执行:curl -v http://localhost:3000 或 telnet localhost 3000 —— 验证端口监听是否正常
- 若失败,检查宿主机防火墙(ufw/iptables/firewalld)是否放行了该端口或容器子网(如172.17.0.0/16)











