如何查看运行中容器的实时资源消耗(如 CPU 使用率、内存占用、网络 I/O、磁盘 I/O)?
在 Docker 中,查看运行中容器的实时资源消耗有多种方法,从最基础的内置命令到直观的图形化工具。以下是几种最常用的方法:
方法一:使用 Docker 内置命令(最推荐、最快速)
Docker 自带了一个类似 Linux top 的命令,专门用于实时监控容器资源。
1. 查看所有运行中容器的实时状态:
bash
docker stats
输出示例:
plaintext
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a1b2c3d4e5f6 web_server 0.15% 45.2MiB / 7.797GiB 0.57% 1.2MB / 345kB 0B / 12.3MB 8
f7g8h9i0j1k2 db_postgres 1.50% 120.5MiB / 7.797GiB 1.51% 450B / 0B 1.2MB / 45.6MB 12
指标说明:
- CPU %:容器占用的 CPU 使用率(如果是多核 CPU,该值可能会超过 100%)。
- MEM USAGE / LIMIT:当前内存使用量 / 容器可用的内存上限。
- MEM %:内存使用百分比。
- NET I/O:容器通过网络接收(Rx)和发送(Tx)的数据量。
- BLOCK I/O:容器对磁盘(块设备)的读写数据量。
- PIDS:容器内运行的进程或线程数。
2. 仅查看指定容器(支持查看一个或多个):
bash
docker stats 容器名或容器ID
# 例如:
docker stats web_server db_postgres
3. 实用技巧:
- 只输出一次结果(不实时刷新):适合脚本调用。bash
docker stats --no-stream - 自定义输出格式(只看容器名、CPU 和内存):bash
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
方法二:使用 ctop(命令行图形化工具,体验极佳)
如果你觉得 docker stats 的界面太简陋,可以使用 ctop。它提供了一个类似 top 的交互式命令行界面,支持上下键选择容器、回车查看详细折线图等。
安装与运行:
- macOS (Homebrew):bash
brew install ctop - Linux (直接下载二进制):bash
sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop sudo chmod +x /usr/local/bin/ctop - 通过 Docker 运行自身(免安装):bash
docker run --rm -ti \ --name=ctop \ --volume=/var/run/docker.sock:/var/run/docker.sock:ro \ quay.io/vektorlab/ctop:latest
直接在终端输入 ctop 即可启动,按 h 可以查看帮助快捷键。
方法三:查看单个容器内的进程状态
如果你想知道某个容器内部具体是哪个进程占用了 CPU 或内存,可以使用:
bash
docker top 容器名或容器ID
这相当于在容器内部执行了 ps 命令。
方法四:Portainer(Web 图形化界面)
如果你更喜欢在浏览器中通过可视化图表(折线图)查看实时资源占用,可以使用 Portainer。
- 运行 Portainer:bash
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce - 打开浏览器访问
http://IP:9000。 - 在容器列表中,点击对应容器“Quick Actions”栏下的 Stats 柱状图图标,即可看到 CPU、内存、网络、I/O 的实时动态折线图。
总结建议
- 临时快速查看:直接用
docker stats。 - 终端高级监控:推荐安装
ctop。 - 生产环境长期监控:建议部署 Prometheus + Grafana + cAdvisor 监控体系。