卷占用与归属排查
卷的容量统计有两层:docker system df -v 能列出卷清单与大小,但部分存储驱动不填 SIZE 字段,数值仅供参考;精确值要找到卷的挂载点直接做目录统计。反查使用方用容器过滤条件即可,已停止的容器同样会被列出,因为接入关系的判断只看引用而不看运行状态。按这两步走,磁盘告警时能快速定位到是哪个卷、被哪些容器占用。
基本信息
| 清单 | docker system df -v 的卷明细段 |
|---|---|
| 精确统计 | 对卷挂载点执行 du -sh |
| 反查使用方 | docker ps -a --filter volume=卷名 |
| 找到路径 | docker volume inspect 卷名 的 Mountpoint 字段 |
典型使用场景
- 磁盘告警定位:确认是数据库卷还是日志卷吃掉的空间
- 清理前评估:找出没有任何容器引用的卷再考虑删除
- 容量规划:定期记录关键卷的增长速率
- 数据迁移:确认源卷的挂载点与大小后规划迁移窗口
- 排查数据去哪了:容器的存储位置是卷还是可写层
统计与反查
统计与反查
# 卷清单与粗略大小
docker system df -v | sed -n '/Local Volumes/,$p' | head -20
# 找到挂载点后做精确统计
docker volume inspect pgdata --format '{{.Mountpoint}}'
sudo du -sh /var/lib/docker/volumes/pgdata/_data
# 反查哪些容器在用这个卷
docker ps -a --filter volume=pgdata --format '{{.Names}}\t{{.Status}}'手段与适用场景
| 需求 | 命令 | 注意 |
|---|---|---|
| 列出全部卷 | docker volume ls | 看名字与驱动,识别匿名卷 |
| 看大致体积 | docker system df -v | 部分驱动 SIZE 为空 |
| 看精确体积 | du -sh 挂载点 | 大卷统计有 IO 开销 |
| 反查使用方 | docker ps -a --filter volume= | 包含已停止的容器 |
空的 SIZE 列不代表卷里没有数据,不同驱动对大小字段的支持不一致,以挂载点的目录统计为准。
磁盘被占满但找不到对应文件时,考虑已删除但被进程持有的文件,需要重启相关进程才能释放。
定期记录关键卷的体积是容量规划最实用的做法:在业务低谷采集一次,观察增长速率,就能提前判断是否需要扩容或清理,而不是等到磁盘写满。