docker inspect 不提供网络连接生命时长或实时流量分布数据,仅输出容器静态配置快照及启动/停止时间戳;需结合 netstat/ss、cgroup、tcpdump 或 NetData 等工具协同分析运行时网络行为。`docker inspect` 本身**不提供网络连接的生命时长或实时流量分布数据**。它输出的是容器**静态配置快照**和**启动/停止时间戳**,属于元数据层面,而非运行时网络行为监控工具。 要真正分析“每个网络连接的生命时长与流量分布”,需结合其他工具协同完成。以下是清晰、可落地的分步方案:
明确 inspect 能给什么(基础锚点)
执行 docker inspect mycontainer 可获取:
- Created:容器创建时间(非启动时间)
- StartedAt 和 FinishedAt:反映实际运行生命周期(若已退出)
- NetworkSettings.Networks:IP、Gateway、Subnet 等——这是连接的“起点地址”和所属网络拓扑
-
NetworkSettings.NetworkMode:如
bridge、host或container:xxx——决定网络栈归属,直接影响连接可见性
⚠️ 注意:这些字段不记录任何连接建立/关闭时间、字节数、TCP状态变迁等动态指标。
获取连接生命时长:用宿主机 netstat/ss + 时间戳对齐
容器内进程的 TCP 连接在宿主机上可见(尤其 bridge/host 模式),可通过以下方式估算单个连接存活时间:
- 查容器绑定的宿主端口:
docker inspect -f '{{.NetworkSettings.Ports}}' mycontainer(如"80/tcp": [{"HostIp": "0.0.0.0", "HostPort": "8080"}]) - 在宿主机执行:
ss -tntp 'sport == :8080 or dport == :8080',观察timer列(如timer:(keepalive,119min,0))或结合st(state)与ts(时间戳)列人工比对 - 配合定时采样脚本(如每5秒记录一次 ss 输出),再用日志差分计算连接持续时间
分析流量分布:靠 cgroup + netdev 或专用工具
Docker 容器底层使用 cgroup v1/v2 管理网络资源,其统计信息可间接反映流量:
- 查容器 cgroup 路径:
docker inspect -f '{{.HostConfig.CgroupParent}}' mycontainer,再定位到/sys/fs/cgroup/net_cls/.../net_cls.classid对应的 netdev 统计 - 更直接方式:进入容器命名空间抓包
pid=$(docker inspect -f '{{.State.Pid}}' mycontainer)nsenter -t $pid -n tcpdump -i any -w /tmp/container.pcap -c 1000
然后用 Wireshark 或 tshark 分析连接时长、RTT、重传、字节分布等 - 生产推荐:部署 NetData、cAdvisor 或 Telegraf + Prometheus,它们能自动采集 per-container 的网络 I/O、连接数、丢包率等指标,并支持按时间维度聚合
关键提醒:哪些场景 inspect 会“失效”
以下情况 NetworkSettings 字段无法反映真实连接状态:
- 容器使用
--network container:another:此时NetworkSettings.Networks为空,所有网络信息需从被共享的容器查NetworkMode - 使用
host网络模式:容器无独立网络命名空间,NetworkSettings.IPAddress为空,所有连接即宿主机连接 - 容器崩溃后重启(非 stop/start):
StartedAt更新,但旧连接痕迹完全丢失,无历史留存
流量与连接行为是运行时现象,inspect 是快照工具。想深度分析,必须走出 JSON,走向系统观测层和网络协议层。


















