核心是采集网络i/o数据和连接状态,docker通过docker stats提供实时吞吐总量,cadvisor暴露细粒度指标(如按接口、方向、连接数),vnstat适配宿主机网络接口实现长期趋势分析,并需结合基线对比、连接数检查与dns验证等技巧综合判断异常。

直接监控容器网络指标,核心是采集网络 I/O 数据和连接状态,Docker 本身不提供深度网络行为分析,但能暴露基础流量与接口统计。关键在于结合内置命令、cgroups 底层数据和专用工具分层获取。
用 docker stats 查看实时网络吞吐
这是最快速的方式,适用于日常巡检或临时排查:
- docker stats 输出中的 NET I/O 字段,显示每个容器的累计接收(RX)和发送(TX)字节数,单位为 kB/MB/GB
- 该值来自内核 cgroup v1 的
net_cls或 v2 的io.stat,反映容器网络栈的实际流量 - 加
--no-stream可获取单次快照,适合脚本定时采集;不加则持续刷新,便于肉眼观察波动 - 注意:它不区分协议(TCP/UDP)、端口或目标 IP,仅总量维度
通过 cAdvisor 获取细粒度网络指标
cAdvisor 是专为容器设计的监控代理,能自动发现所有容器并暴露标准化的网络指标:
- 默认监听
:8080/metrics,提供如container_network_receive_bytes_total和container_network_transmit_bytes_total等 Prometheus 格式指标 - 支持按接口(如 eth0)、方向(receive/transmit)、容器名、命名空间等多维标签过滤
- 还能采集连接数(
container_network_tcp_connections)、丢包率、错误包等更贴近网络健康的状态数据 - 部署简单:
docker run -d --name=cadvisor -p 8080:8080 --privileged -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro gcr.io/cadvisor/cadvisor:v0.49.1
补充网络行为监控:vnStat + 容器网络模式适配
若需长期记录、带宽趋势或按接口拆分(比如监控容器使用的 host 网络或自定义 bridge),可引入 vnStat:
- vnStat 不依赖容器运行时,而是读取
/proc/net/dev中的内核网络接口统计,因此对 Docker 网络兼容性好 - 在 host 模式下,容器直接使用宿主机网卡,vnStat 可直接监控对应物理或虚拟接口(如 docker0、br-xxx)
- 在 bridge 模式下,可通过
docker network inspect查到子网和网桥名,再用 vnStat 监控该网桥设备(如 br-xxxxxx) - 配合 cron 每 5 分钟执行
vnstat -u -i docker0更新数据库,之后用vnstat -h查小时级流量,或导出 HTML 报表
识别异常网络状态的实用技巧
光看流量不够,还需关联上下文判断是否异常:
- 对比历史基线:同一容器在业务低峰期的 NET I/O 通常稳定,若某时段突增 5 倍且无发布变更,需查日志或连接数
- 检查连接堆积:
netstat -tunlp | grep :端口号或ss -tuln查容器内监听与 ESTABLISHED 连接数 - 验证 DNS 解析延迟:
docker exec -it 容器名 nslookup google.com,排除因 DNS 卡顿导致的“假性网络慢” - 抓包辅助定位(谨慎使用):
docker exec -it 容器名 tcpdump -i eth0 -w /tmp/out.pcap port 8080,导出后用 Wireshark 分析











