docker stats
命令是 Docker 提供的一个实时监控工具,用于查看正在运行容器的资源使用情况,通过该命令,用户可以直观地了解 CPU、内存、网络 I/O 以及磁盘 I/O 等关键指标,从而有效管理和优化容器性能,本文将详细介绍 docker stats
命令的功能、使用方法、输出字段解析以及实际应用场景,并辅以表格说明常见参数的用途,最后通过 FAQs 解答常见疑问。

docker stats
命令的基本功能
docker stats
命令默认会实时显示所有正在运行容器的资源消耗数据,数据每秒更新一次,类似于 Linux 系统中的 top
命令,其核心价值在于帮助开发者或运维人员快速定位资源占用异常的容器,CPU 使用率过高、内存溢出等问题,当某个容器的 CPU 使用率持续接近 100% 时,可能意味着该容器内的应用程序存在性能瓶颈或无限循环逻辑,需要进一步排查。
命令语法与常用参数
docker stats
命令的基本语法为 docker stats [OPTIONS] [CONTAINER...]
,OPTIONS
为可选参数,CONTAINER...
为指定容器的 ID 或名称,若不指定则显示所有运行中的容器,以下是常用参数的说明:
参数 | 说明 | 示例 |
---|---|---|
--no-stream |
静态显示数据,不实时更新 | docker stats --no-stream |
--format |
自定义输出格式,支持 Go 模板语法 | docker stats --format "table {{.Container}} {{.CPUPerc}}" |
--no-trunc |
不截断长输出,例如容器名称或命令 | docker stats --no-trunc |
--all |
显示所有容器(包括停止的容器) | docker stats --all |
使用 --format
参数可以自定义输出表格,仅显示容器名称和 CPU 使用率:
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
这将输出类似以下格式的数据:

CONTAINER %CPU MEM USAGE / LIMIT
nginx 0.50% 12.3MB / 1GB
redis 1.20% 45.6MB / 1GB
输出字段解析
docker stats
默认输出的字段包含以下内容(以实际运行环境为准):
- CONTAINER:容器 ID 或名称(默认截断,使用
--no-trunc
可完整显示)。 - CPU %:容器 CPU 使用率,表示容器占宿主机 CPU 总核数的百分比,宿主机有 4 核 CPU,容器使用 1 核则显示 25%。
- MEM USAGE / LIMIT:内存使用量与限制。
512MB / 2GB
表示容器使用了 512MB 内存,上限为 2GB。 - NET I/O:网络输入(
IN
)和输出(OUT
)数据量,单位通常为 MB 或 GB。 - BLOCK I/O:磁盘读写数据量,反映容器对块设备的访问情况。
- PIDS:容器运行的进程数,可用于检测容器内进程是否异常创建。
实际应用场景
- 性能排查:当应用响应缓慢时,通过
docker stats
检查容器 CPU 或内存是否耗尽,若某个容器的 CPU 使用率持续 100%,可能是代码死循环或数据库查询效率低。 - 资源限制验证:结合
docker run
的--cpus
和--memory
参数,检查容器是否遵守资源限制,设置--cpus=1.5
后,观察 CPU 使用率是否超过 150%。 - 集群监控:在 Docker Swarm 或 Kubernetes 环境中,可通过批量执行
docker stats
收集各节点容器的资源数据,辅助负载均衡决策。
注意事项
- 性能开销:
docker stats
本身会占用一定的系统资源,尤其是在监控大量容器时,建议使用--no-stream
减少实时更新频率。 - 数据准确性:网络和磁盘 I/O 数据可能因 Docker 版本或存储驱动不同而存在差异,建议结合
docker inspect
或第三方工具(如 cAdvisor)进行交叉验证。 - 容器状态:仅对运行中的容器有效,若需查看停止容器的历史数据,需依赖日志或监控系统(如 Prometheus + Grafana)。
相关问答 FAQs
Q1: docker stats
显示的 CPU 使用率是如何计算的?
A1: docker stats
的 CPU 使用率是基于容器在采样周期内(默认 1 秒)占用 CPU 的时间与宿主机总 CPU 时间的比值计算得出的,公式为:(容器 CPU 时间差 / 采样时间间隔) / 宿主机 CPU 核心数 * 100%
,单核宿主机中,容器在 1 秒内占用 0.5 秒 CPU 时间,则显示 50%。
Q2: 如何通过 docker stats
定位内存泄漏的容器?
A2: 首先使用 docker stats --no-stream
查看所有容器的内存使用情况,重点关注 MEM USAGE
字段持续增长的容器,然后结合 docker logs <container>
检查容器日志中的错误信息,或使用 docker top <container>
查看进程状态,若内存持续增长且无回落,可能存在内存泄漏,需重启容器或更新应用程序。
