直白地说,docker stats 依然是监控 Docker 容器资源占用最轻量、也最常用的实时查看方式。它既能查看当前资源快照,也支持按容器单独分析,CPU%、内存使用、网络 I/O、磁盘 I/O 等关键指标基本都能快速掌握。不过如果还要继续深入,尤其是排查到进程级别的问题,仅靠它通常还不够,往往还需要结合 docker top、docker exec top 以及宿主机上的系统监控工具一起判断。如果需求从临时故障排查转向持续性监控,那么更稳妥的方案通常是使用 cAdvisor + Prometheus + Grafana 这套监控组合;当然,在分析这些监控指标时,也不要忽视容器资源限制本身带来的影响。

直接使用 docker stats 就可以快速查看 Docker 容器的实时资源消耗,这是最轻便、最常见的监控方式之一。它无需安装额外软件,开箱即用,非常适合日常巡检、性能观察以及突发问题时的快速排查。
用 docker stats 快速查看实时占用
这条命令由 Docker 原生提供支持,输出结果清晰、直观,适合快速判断容器当前运行状态:
docker stats --no-stream:仅输出一次当前快照,适合脚本调用、自动化采集或定时任务使用docker stats web-app:只查看指定容器的资源使用情况,减少无关信息干扰- 输出字段通常包括:CPU %、MEM USAGE / LIMIT、MEM %、NET I/O、BLOCK I/O
例如,如果发现某个容器的 MEM % 持续接近 100%,或者 CPU % 长时间高于 90%,一般就可以初步锁定性能瓶颈或异常方向。
定位具体进程:结合 docker top 和宿主机工具
docker stats 能告诉你“哪个容器资源占用高”,但无法直接说明“具体是什么进程导致的”。这时就需要进一步深入到容器内部或宿主机层面排查:
docker top:列出容器中的所有进程,并查看对应的 CPU、内存占用情况docker exec -it:进入容器执行 top,直接观察是哪个进程持续消耗大量资源top - 在宿主机上使用
iotop -o --batch查看磁盘 I/O 热点,或通过pidstat -u 1分析 CPU 时间分布
长期监控与告警:cAdvisor + Prometheus
如果你的目标是记录资源趋势、做容量规划,或者建立自动告警机制,那么单靠 docker stats 就明显不够了。更推荐使用这一套常见的 Docker 容器监控方案:
- cAdvisor:自动采集所有容器的 CPU、内存、网络、磁盘等监控指标,并自带 Web 页面(默认端口 8080)
- Prometheus:定时拉取 cAdvisor 数据并进行长期存储,支持 PromQL 查询和阈值告警配置
- 配合 Grafana 做可视化展示,可以更直观地看出某个容器内存是否持续上涨,或某项服务的网络延迟是否突然升高
部署 cAdvisor 通常并不复杂,一个 docker-compose.yml 文件就可以快速启动,而且无需修改现有应用代码。
注意资源限制与实际使用的关系
在监控 Docker 容器资源使用时,不要只盯着百分比数值,更要结合容器本身配置的资源限制一起分析:
- 如果启动容器时设置了
--memory 512m,那么当MEM USAGE / LIMIT显示为500MiB / 512MiB时,实际上已经非常接近风险边界 - 如果没有设置内存限制,那么
MEM USAGE对应的往往是宿主机总内存,单看这个数值的参考意义有限,更应重点关注其变化趋势 docker inspect可以用来确认当前容器实际生效的内存限制参数| grep -i memory
