直接监控Docker容器网络连接数需通过nsenter进入容器网络命名空间,调用ss或netstat统计;推荐使用ss -s查看全量状态,或ss -tn state established统计ESTABLISHED数;可脚本批量采集并排序,亦可用check-docker-connection工具简化操作。

直接监控 Docker 容器的网络连接数,核心是进入容器的网络命名空间,调用系统级工具(如 netstat 或 ss)统计 TCP/UDP 连接状态。Docker 本身不提供原生命令输出连接数,但借助宿主机已有工具和容器网络结构,可稳定、低开销地实现。
定位容器并确认网络命名空间可用
确保宿主机已安装 nsenter 和 netstat(或 ss),这是基础前提:
- 运行
docker ps获取目标容器名或 ID - 检查容器是否使用默认 bridge 网络:
docker inspect,输出| grep -i '"NetworkMode":' "NetworkMode": "bridge"表示支持标准方式 - 验证 nsenter 可用性:
nsenter --version;若缺失,Ubuntu/Debian 安装util-linux,CentOS/RHEL 安装util-linux-ng
用 netstat 或 ss 统计连接数(推荐 ss,更轻快)
无需进入容器内部 shell,直接通过 nsenter 调用容器网络命名空间中的连接统计命令:
- 统计 ESTABLISHED 连接数:
nsenter -t $(docker inspect -f '{{.State.Pid}}') -n -- ss -tn state established | wc -l - 查看全部连接状态分布:
nsenter -t $(docker inspect -f '{{.State.Pid}}'(输出类似) -n -- ss -s 64875 total, 12346 listening, 12345 established...) - 只看监听端口:
nsenter -t $(docker inspect -f '{{.State.Pid}}') -n -- ss -tln
注意:所有命令在宿主机执行,-t 指定容器进程 PID,-n 表示进入网络命名空间,-- 后为实际要运行的命令。
批量监控多个容器的连接数
写一个简短脚本即可按需汇总,例如保存为 conn-count.sh:
#!/bin/bash
for cid in $(docker ps -q); do
name=$(docker ps --format "{{.Names}}" -f id=$cid)
pid=$(docker inspect -f '{{.State.Pid}}' $cid 2>/dev/null)
if [ -n "$pid" ] && [ "$pid" != "0" ]; then
est=$(nsenter -t $pid -n -- ss -tn state established 2>/dev/null | wc -l)
echo "$name: $est ESTABLISHED"
fi
done | sort -k3 -nr
运行 bash conn-count.sh 即可列出所有运行中容器的 ESTABLISHED 连接数,并按数量降序排列。
用 check-docker-connection 工具简化操作
这是一个专为该场景设计的轻量工具,自动完成 PID 查找、命名空间切换和状态分类统计:
- 安装后直接查单个容器:
check-docker-connection -c nginx-app - 查连接最多的前 5 个容器:
check-docker-connection -n 5 - 输出含 ESTABLISHED、TIME_WAIT、LISTEN、UDP 等多维度计数,表格清晰,适合巡检或集成进告警脚本
它依赖 netstat 和 nsenter,原理与手动方式一致,但封装了容错和格式化逻辑,减少出错可能。











