Docker无内置“网络快照”,实指故障前后系统化采集五类网络状态数据:容器网络配置、宿主机路由与iptables规则、网桥及veth状态、关键路径抓包、conntrack连接跟踪,用于精准回溯通信断点。

Docker 本身没有叫“网络快照”的内置功能,但生产环境中常说的 网络快照,是指在故障发生前后,系统性采集并固化关键网络状态数据,用于回溯分析容器通信链路断点。这不是一键命令,而是一套可脚本化、可自动触发的诊断数据捕获流程。
核心目标是:当容器间通信异常(如 ping 不通、curl 超时、DNS 失败)时,能快速还原“数据包从哪来、经过哪、卡在哪”。
一、什么是有效的网络快照?
不是截图,而是结构化采集以下五类现场信息:
- 容器网络配置(IP、网关、DNS、网络模式)
- 宿主机路由表与 iptables 规则(特别是 nat/filter 表)
- docker0 或 CNI 网桥状态(veth 配对、brctl show)
- 实时抓包(在关键路径:宿主机网卡、docker0、容器内)
- 内核连接跟踪状态(conntrack -L)
这些组合起来,就构成一次完整的“网络快照”。
二、实操命令清单(可直接复制执行)
✅ 快速采集基础快照(30秒完成)
# 1. 记录当前时间戳(所有文件带前缀)
TS=$(date +%Y%m%d_%H%M%S)
# 2. 容器网络详情(替换 <container> 为实际名或 ID)
docker inspect <container> > net-snap_${TS}_inspect.json
# 3. 所有网络列表 + 指定网络详情
docker network ls > net-snap_${TS}_networks.txt
docker network inspect bridge > net-snap_${TS}_bridge.json # 或自定义网络名
# 4. 宿主机关键网络状态
ip route show > net-snap_${TS}_route.txt
iptables -t nat -L -n -v > net-snap_${TS}_iptables_nat.txt
iptables -L FORWARD -n -v > net-snap_${TS}_iptables_forward.txt
conntrack -L > net-snap_${TS}_conntrack.txt
# 5. 网桥与 veth 状态
brctl show docker0 > net-snap_${TS}_brctl.txt
ip link show | grep -A2 -B2 "veth\|br-" > net-snap_${TS}_links.txt✅ 抓包快照(按需选择位置)
# 在宿主机物理网卡(确认请求是否进来)
tcpdump -i eth0 -c 50 port 8080 -w net-snap_${TS}_eth0.pcap &
# 在 docker0 网桥(验证 NAT/端口映射是否生效)
tcpdump -i docker0 -c 50 port 80 -w net-snap_${TS}_docker0.pcap &
# 进入容器抓包(确认容器是否收到包)
docker exec -d <container> tcpdump -i eth0 -c 50 port 80 -w /tmp/container.pcap
docker cp <container>:/tmp/container.pcap ./net-snap_${TS}_container.pcap⚠️ 注意:抓包建议限制
-c 50包数,避免阻塞;生产环境慎用长时间抓包。
三、如何用于实战排查?举一个典型链路不通案例
现象:容器 A(172.17.0.2)无法 curl 容器 B(172.17.0.3)的 8080 端口。
快照分析步骤:
- 查
net-snap_*.json:确认两容器都在bridge网络,IP 正确,网关是172.17.0.1 - 查
net-snap_*_route.txt:宿主机是否有到172.17.0.0/16的直连路由(应有) - 查
net-snap_*_brctl.txt:确认两个容器的 veth 接口都挂在docker0上 - 查
net-snap_*_iptables_forward.txt:FORWARD 链策略是否为ACCEPT?有无 DROP 规则匹配? - 查
net-snap_*_docker0.pcap:是否有 SYN 包发往172.17.0.3:8080?有无响应? - 查
net-snap_*_container.pcap(B 容器内):是否收到 SYN?应用是否监听0.0.0.0:8080(而非127.0.0.1)?
90% 的桥接网络不通问题,靠这组快照就能定位到:iptables DROP、容器未监听全地址、veth 未挂载、或 FORWARD 策略被锁死。
四、自动化快照建议(提升效率)
- 将上述命令写成
net-snapshot.sh,加参数支持指定容器名和超时 - 结合
systemd或cron,在告警触发时自动执行(例如 Prometheus 告警 webhook 调用) - 快照文件统一存到
/var/log/docker-snapshots/,按日期归档,保留 7 天 - 配合日志收集工具(如 Filebeat),把快照元数据(时间、容器名、错误关键词)推送到 ELK
不复杂但容易忽略——真正有用的快照,不是等故障后再手动敲命令,而是故障发生的前 10 秒内已自动落盘。


















