docker stats 可实时查看容器IO读写累计量,通过连续观察 BLOCK I/O 数值变化(如10MB/5MB→30MB/15MB)并结合刷新间隔,可估算瞬时读写速率(如10MB/s、5MB/s)。

直接用 docker stats 就能实时看到容器的 IO 读写速率,不需要额外安装或进容器内部。
基础用法:查看单个或多个容器的IO速率
运行以下命令即可显示正在运行的容器列表及其资源使用情况,包括磁盘读写(单位为 B/s、KiB/s、MiB/s):
-
docker stats—— 查看所有运行中容器的实时统计 -
docker stats my-nginx—— 只看指定容器(如容器名或 ID) -
docker stats --no-stream my-nginx—— 查看一次快照,不持续刷新
重点关注的IO字段含义
输出中与IO直接相关的列有:
- MEM USAGE / LIMIT:内存占用(虽非IO,但高内存压力常引发IO等待)
- NET I/O:网络收发流量(区分于磁盘IO)
-
BLOCK I/O:这才是关键——格式为
12.5MB / 4.2MB,前半部分是累计读取量,后半部分是累计写入量
注意:docker stats 不直接显示“每秒速率”,但连续观察 BLOCK I/O 数值变化,结合刷新间隔(默认约1秒),可估算瞬时读写速度。例如2秒内从 10MB / 5MB 变为 30MB / 15MB,说明平均读速约10MB/s、写速约5MB/s。
配合选项提升IO监控效率
-
docker stats --format "table{{.Name}}\t{{.BlockIO}}\t{{.PIDs}}"—— 自定义输出,聚焦关键列 -
docker stats --all—— 包含已停止但未删除的容器(仅显示历史 BLOCK I/O 累计值) - 搭配
watch -n 1 'docker stats --no-stream container-name'实现准实时速率推算
补充:BLOCK I/O 数据来源与局限性
该数据来自 Linux cgroups 的 blkio.io_service_bytes 统计,反映容器对块设备(如 /dev/sda)的真实读写总量。但它不区分具体文件或路径,也不体现 IOPS 或延迟;若需更细粒度分析(比如哪个进程在狂写日志),需进一步用 iotop 或 iostat 在宿主机或容器内排查。


















