docker数据卷无内置监控,需结合系统工具与脚本实现:监控存在性、空间使用率(du/df)、挂载状态及异常变更;推荐巡检脚本+prometheus+grafana方案。

Docker 数据卷本身没有内置监控能力,但可通过组合系统级工具、Docker 命令和轻量脚本实现有效监控。核心目标是掌握:卷是否存在、空间使用率、挂载状态、异常变更(如被意外删除或未挂载)。
Volume 空间使用率监控
Docker 卷实际存储在宿主机路径(如 /var/lib/docker/volumes/<name>/_data</name>),其占用即对应 Linux 文件系统使用情况。
- 直接用
du查看单个卷大小:du -sh /var/lib/docker/volumes/myapp_data/_data
- 批量统计所有卷的磁盘占用(含名称与大小):
docker volume ls -q | xargs -I {} sh -c 'echo -n "{}: "; du -sh /var/lib/docker/volumes/{}/_data 2>/dev/null | cut -f1' - 推荐结合
df判断底层文件系统整体水位(因卷共享宿主机/var/lib/docker分区):df -h /var/lib/docker
若该分区使用率超 85%,需预警——即使单个卷不大,也可能影响 Docker 运行。
Volume 存在性与挂载状态检查
确保关键卷未被误删,且当前有容器正在使用它:
- 检查卷是否存在于 Docker 管理列表中:
docker volume inspect myapp_data >/dev/null 2>&1 && echo "OK" || echo "MISSING"
- 查看哪些容器正在使用某卷(通过
docker ps+ 挂载信息反查):docker ps --format '{{.Names}} {{.Mounts}}' | grep myapp_data或更准确方式(解析容器详细挂载):
docker ps -q | xargs -I {} docker inspect -f '{{.Name}} {{range .Mounts}}{{if eq .Name "myapp_data"}}USED{{end}}{{end}}' {} 2>/dev/null | grep USED
自动化监控建议
- 写一个简短的巡检脚本(如
check-volumes.sh),每 5 分钟运行一次,输出关键指标到日志或发送告警:- 卷存在性(对比预设清单)
-
/var/lib/docker分区使用率 - 单个业务卷大小突增(如 24 小时增长 >30%)
- 配合 Prometheus + Node Exporter:
- 用
textfile_collector将du结果写成指标格式(如volume_usage_bytes{name="myapp_data"} 123456789) - 在 Grafana 中可视化趋势、设置阈值告警
- 用
- 日志侧补充:监听 Docker daemon 日志中的
volume rm或volume create行为(需开启--log-level=info并过滤关键词),用于审计变更。
不复杂但容易忽略











