docker stats仅显示容器资源占用,需配合nproc、free -h、df -h、uptime等命令获取宿主机cpu核数、内存总量、磁盘空间及系统负载,实现容器级与主机级双视角监控。

直接用 docker stats 查容器实时消耗,但它不显示宿主机整体硬件资源(比如总 CPU 核数、内存总量、磁盘可用空间)。要配合查看,得额外运行系统级命令,形成“容器级 + 主机级”双视角。
查宿主机硬件基础信息
在执行 docker stats 前或同时,快速运行以下命令获取底层资源容量:
-
CPU 总核数与型号:运行
nproc(只看逻辑核数)或lscpu | grep -E "CPU\(s\)|Model name" -
内存总量与使用率:运行
free -h,重点关注Total和Available列;也可用cat /proc/meminfo | grep MemTotal -
磁盘空间与挂载点:运行
df -h,特别留意/var/lib/docker所在分区(通常是/或/var),因为容器镜像、层、卷都存在这里 -
系统负载与进程数:运行
uptime或top -n1 | head -5,观察 1/5/15 分钟平均负载及总进程数,辅助判断是否主机过载而非单个容器问题
stats 输出中关键字段的硬件对应关系
docker stats 显示的是容器视角的资源占用,需结合硬件总量才能判断是否异常:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
-
CPU % 是相对于所有 CPU 核的百分比(例如 4 核机器上 100% = 占满 1 个核,400% = 占满全部 4 核)。若持续 >300%,且
nproc返回 4,则说明该容器已逼近物理上限 -
MEM USAGE / LIMIT 中的 LIMIT 来自
--memory限制或 cgroup 默认值。若未设限,LIMIT 显示为 host 总内存(如7.6GiB / 7.6GiB),此时 MEM % 接近 100% 就意味容器吃光了整机内存 -
BLOCK I/O 高不代表磁盘快满,但若
df -h显示根分区剩余
组合命令提升排查效率
不用反复切换命令,可以用一行脚本把主机状态和容器 stats 同屏输出:
watch -n 2 'echo "== Host =="; free -h | grep Mem; df -h / | grep -v Filesystem; echo -e "\n== Containers =="; docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.NetIO}}"'
-
watch -n 2每 2 秒刷新一次 - 上方固定显示内存剩余、根盘可用空间,下方实时刷新各容器 CPU%、内存%、网络流量
- 避免凭记忆对比数值,一眼看出容器涨耗是否与主机资源紧张同步发生
注意 stats 的局限性
docker stats 本身有几点不能替代系统工具:
- 它不显示 swap 使用量,而
free -h中的Swap: Available很关键——如果为 0 且容器 MEM% 高,说明已在用交换区,性能必然下降 - 它不反映内核线程、僵尸进程等非容器进程开销,这些得靠
ps aux --sort=-%cpu | head -10辅助定位 - 它默认只统计运行中容器,停掉的容器资源残留(如未清理的 volume 或 dangling image)需用
docker system df -v查看磁盘实际占用










