运行 docker system df 可查看 docker 磁盘使用概览,配合 -v 参数展开详情,重点关注 images、containers 和 local volumes 三类数据;images 的 size 为共享层总和,悬空镜像单独列出,volumes 显示名称与路径,需结合 du -sh 等命令进一步定位大文件。

直接运行 docker system df 就能看到 Docker 整体磁盘使用概览,但它默认只显示汇总信息,想真正定位到“哪个镜像/容器占了最多空间”,需要配合详细模式和筛选技巧。
理解 docker system df 的三类核心数据
执行命令后会看到三行表头:TYPE(类型)、TOTAL(总数)、ACTIVE(正在使用的数量)、SIZE(已用空间)、RECLAIMABLE(可清理空间)。重点关注的是:
- Images:所有镜像层叠加后的实际占用(含悬空层),SIZE 值反映当前镜像缓存总大小
- Containers:仅统计容器的可写层(即 overlay2 中的 diff 目录),不包含镜像本身
- Local Volumes:独立 volume 占用,这部分最容易被忽略但可能非常大
加 -v 参数看详细列表
运行 docker system df -v 可展开每类资源的具体项目。例如在 Images 区域,你会看到每个镜像 ID、仓库名、标签、创建时间,以及它单独占用的磁盘空间(SIZE 列)。注意:
- 同一镜像多个标签(如
nginx:latest和nginx:1.25)会合并计为一个条目,SIZE 是共享层总和 - 悬空镜像(dangling=true)会单独列出,通常可安全删除
- Volumes 列表里显示每个 volume 名称和对应路径(如
/var/lib/docker/volumes/myapp_data/_data),便于你手动检查内容
结合其他命令精准定位大文件源
docker system df 不会告诉你某个 volume 里具体是哪个日志或缓存文件撑大了体积。这时需组合操作:
- 查最大的 volume:
docker volume ls -q | xargs -I {} sh -c 'echo {} ; sudo du -sh /var/lib/docker/volumes/{}/_data 2>/dev/null | sort -hr | head -n 1' - 查运行中容器的写层大小:
docker ps -q | xargs -I {} sh -c 'echo "Container {}:"; docker diff {} | wc -l'(行数多往往意味着写入多) - 快速清理无用资源:
docker system prune -a --volumes(慎用,会删掉所有未被引用的镜像、容器、网络和 volume)
日常维护建议
避免磁盘突然爆满,推荐几个轻量习惯:
- 定期执行
docker system df看趋势,尤其上线新服务后 - 给 volume 挂载宿主机目录时,用
df -h直接监控该路径,比查 Docker 内部更直观 - 应用日志不要直接写进容器可写层,优先用
docker logs或挂载/dev/stdout到日志系统 - 构建镜像时用多阶段构建(multi-stage),减少最终镜像层数和体积










