docker network inspect 不显示路由拓扑,而是展示网络资源配置,包括子网、网关、容器IP、驱动类型和IPAM设置;其输出隐含路由逻辑:容器默认路由指向Gateway,经网桥和宿主机栈通信。

docker network inspect 本身不直接显示“路由拓扑”(如内核路由表、数据包转发路径),它展示的是网络资源配置视图:子网、网关、已连接容器及其 IP/Endpoint 信息、驱动类型、IPAM 设置等。所谓“路由拓扑”,在 Docker 网络语境中,实际体现为容器如何通过网桥、网关、宿主机网络栈与外部通信——这些关键线索就藏在 inspect 输出里,只需正确解读。
以下是实用、可操作的查看和推断方法:
查看网络基础配置与容器连接关系
运行命令获取结构化信息:
docker network inspect bridge
重点关注以下字段:
-
"Driver":确认是bridge、host、overlay等,决定通信模型 -
"IPAM.Config.Subnet"和"Gateway":例如"172.17.0.0/16"和"172.17.0.1",即 docker0 网桥的地址段和默认网关(也是容器的默认下一跳) -
"Containers":列出所有接入该网络的容器,含每个容器的"IPAddress"、"MacAddress"、"EndpointID",说明它们在同一二层域内直连
✅ 示例:若看到
"Containers": { "abc123...": { "IPAddress": "172.17.0.3" } },说明该容器在 bridge 网络中拥有独立 IPv4 地址,通过172.17.0.1(docker0 接口)对外通信。
识别容器实际使用的网络模式
单个容器可能属于多个网络(尤其自定义网络),需结合容器自身 inspect 判断:
docker inspect -f '{{ .HostConfig.NetworkMode }}' my-container输出可能是:
-
bridge→ 使用默认或自定义 bridge 网络,走虚拟网桥 + NAT(出向)或端口映射(入向) -
host→ 无独立网络命名空间,直接复用宿主机路由表,docker network inspect对其无效(它不属于任何 Docker 网络) -
none→ 仅含 netns,无 IP、无路由,inspect显示"Networks": {} -
container:another→ 共享另一容器的网络栈,此时应 inspect 那个“源容器”
查看自定义网络的完整拓扑上下文
创建带子网的自定义网络后:
docker network create --subnet=192.168.100.0/24 --gateway=192.168.100.1 mynet docker run -d --name app --network mynet nginx
再执行:
docker network inspect mynet
你会看到:
-
"Subnet": "192.168.100.0/24"和"Gateway": "192.168.100.1" -
"Containers"中app的"IPAddress": "192.168.100.2" -
"Driver": "bridge"表明这是用户定义的桥接网络(比默认 bridge 更可控)
这构成一个清晰的三层拓扑:容器 → 网桥接口(如 br-xxxx)→ 宿主机 → 外部网络。Docker 自动为该网桥配置 iptables SNAT 规则,实现容器访问外网。
补充:验证实际路由行为(非 inspect 但必要)
若需确认容器内部路由路径,可在容器内执行:
docker exec app ip route
典型输出:
default via 192.168.100.1 dev eth0 192.168.100.0/24 dev eth0 scope link src 192.168.100.2
这印证了 docker network inspect 提供的网关和子网信息——即容器的默认路由指向网络定义中的 Gateway。
不复杂但容易忽略



















