执行 docker network ls 仅显示基础信息,需结合 inspect 获取子网、容器数等关键字段,识别命名不规范、驱动误配、scope错配三类高危网络,并用 shell 脚本生成含名称、驱动、作用域、子网、容器数的矩阵快照。

直接运行 docker network ls 只能列出网络名称和驱动,但生产环境需要的不是“列表”,而是可操作的网络拓扑视图——包括哪些容器连在哪个网络、IP 分配是否重叠、子网是否冲突、是否有闲置或僵尸网络。关键在于把基础命令和上下文信息结合,快速定位风险点。
看懂输出字段背后的业务含义
执行 docker network ls 后,重点关注四列:
-
NAME:不是随便起的名字。生产中建议统一前缀,如
prod-api-net、staging-db-net,一眼区分环境与用途 -
DRIVER:
bridge是单机主力,overlay出现在 Swarm 集群中,若看到多个overlay网络却没启用 Swarm,说明配置残留或误操作 -
SCOPE:
local表示仅本机有效;swarm才是跨节点网络。若生产集群里全是local,说明服务间无法跨主机通信 -
NETWORK ID:短 ID(如
a1b2c3d)可用于后续inspect,避免输错长 ID
用 inspect 补全关键信息链
对每个待评估网络,立刻跟一条 docker network inspect <name></name>,重点扫三处:
-
IPAM.Config.Subnet:确认子网不重叠。例如
172.20.0.0/16和172.21.0.0/16安全;若两个网络都用172.17.0.0/16(默认 docker0),则存在 IP 冲突风险 -
Containers 字段:数一数实际连接的容器数量。若显示
{}或为空,该网络极可能已废弃,可标记待清理 -
Options(如有):检查是否启用了
com.docker.network.bridge.enable_ip_masquerade=true,这对出向 NAT 很关键;若为 false,容器可能无法访问外网
识别三类高危网络模式
在列表中快速圈出以下特征网络:
- 名字含 “default” 或 “bridge” 却非系统自建:说明有人手动创建了同名网络,易导致路由混乱
- DRIVER=host 或 none 的网络出现在生产服务容器上:host 模式绕过隔离,none 模式无网络——除非明确用于安全沙箱或离线任务,否则属配置错误
- SCOPE=local 但 NAME 含 “cluster”、“mesh”、“global” 等字眼:命名与能力不符,大概率是部署脚本写错或文档未更新
一键生成轻量级网络矩阵快照
不用第三方工具,用 Shell 组合命令导出结构化摘要:
docker network ls --format "{{.Name}}\t{{.Driver}}\t{{.Scope}}" | \
while IFS=$'\t' read -r name driver scope; do
subnet=$(docker network inspect "$name" 2>/dev/null | jq -r '.[0].IPAM.Config[0].Subnet // "N/A"')
containers=$(docker network inspect "$name" 2>/dev/null | jq -r 'length(.[0].Containers) // 0')
echo -e "$name\t$driver\t$scope\t$subnet\t$containers"
done | column -t -s $'\t'
输出类似:
prod-api-net bridge local 10.10.1.0/24 8staging-db-net bridge local 10.10.2.0/24 3
cluster-data-net overlay swarm 10.0.10.0/24 12
这张表可直接贴进运维看板,5 秒内掌握网络规模、分布与健康度。











