首页/云/Docker 容器速查/docker system df 磁盘占用总览
基础命令50 条

docker system df 磁盘占用总览

按镜像、容器、数据卷、构建缓存四类统计占用与可回收空间,是磁盘告警时优先查看的命令。

Docker 容器速查云更新于 2026-10-13

docker system df 是什么

docker system df 按镜像、容器、本地卷、构建缓存四类统计磁盘占用,并给出每类里可以被回收的估算量。磁盘告警时它是第一站:先看清空间被哪一类吃掉,再决定清理哪一部分,避免上来就删镜像却清不出空间。

基本信息

语法docker system df [选项]
默认列类型、数量、活跃数量、总占用、可回收量
展开明细-v 列出每个镜像、容器、卷、缓存各自的占用
权限要求能访问 Docker 守护进程即可
统计范围只统计 Docker 数据根目录下的对象,宿主其他目录不在此列

典型使用场景

  • 磁盘告警时定位:确认是镜像堆积、容器可写层膨胀还是构建缓存吃掉了空间
  • 清理前做评估:看清可回收量的量级,决定要不要做更大范围的清理
  • 容量规划:按增长趋势给数据根目录预留空间,避免写入失败导致服务异常
  • 构建机运维:流水线机器缓存增长最快,定期核对能避免构建突然失败
  • 交接与审计:快速给出这台机器上镜像、容器、卷的数量与体积概况

常用示例

常用示例
docker system df                     # 四类占用总览
docker system df -v                  # 展开到每个对象
docker system df -v | head -40       # 明细较长,先看开头
docker system df --format 'table {{.Type}} {{.TotalCount}} {{.Size}}'  # 自定义列

四类对象怎么读

类型包含什么常见增长原因
镜像本地所有镜像与标签频繁构建同名标签、拉取多个版本未清理
容器容器的可写层日志写入未轮转、容器内写临时文件
本地卷命名卷与匿名卷的数据数据库与上传目录长期增长,未做归档
构建缓存历史构建产生的中间层流水线反复构建且未设置缓存上限或清理策略

按结果决定动作

  • 镜像占大头且存在悬空镜像:清理无标签的悬空层收益最直接
  • 容器可写层占大头:先查是不是日志没轮转,光删容器治不了根
  • 卷占大头:这类是真实业务数据,要按业务保留策略归档,不能随手删
  • 构建缓存占大头:给构建器设置缓存上限,比反复手工清理更省事
  • 四类都不大但磁盘仍满:说明空间被宿主其他目录占用,要换排查方向
可回收量是估算值:镜像之间共享层,容器与卷之间还有引用关系,实际能清出的空间往往小于这个数字。
卷与构建缓存容易藏在两个大类里被忽略。只清镜像对磁盘的缓解常常有限,看到数字前先展开明细确认占比。

把清理做成常态

  • 给构建器设置缓存上限,让缓存自己滚动淘汰,而不是等磁盘报警再手工清
  • 日志统一配置轮转,可写层就不会因为写日志无限膨胀
  • 卷的保留按业务要求定周期,归档与删除分开授权,避免运维顺手清理业务数据
  • 巡检里加入占用检查,把数字变化纳入监控,比人肉盯着服务器可靠
  • 清理前先确认可回滚:要留的旧版本先推到仓库或导出,删了本地就没有退路

和宿主磁盘的关系

  • 容器引擎的数据根目录通常位于系统盘,规划时要把它单独考虑,别与业务数据挤在同一个小分区
  • 镜像分层共享,物理文件往往比各镜像体积之和小很多,判断真实占用要看这个命令的数字
  • 可写层删除后空间才释放,容器停止但未删除时占用依旧存在
  • 宿主其他目录被写满时,容器运行也会报错,这类问题与本命令显示的数字无关
  • 把数据根目录迁移到独立磁盘前要先停服务,避免迁移过程中出现半截状态

易错点

  • 把可回收量当成一定能释放的空间,清理后磁盘没变化就以为清理失败,其实是共享层与引用关系所致
  • 只盯着镜像列,忽略了卷与构建缓存,磁盘告警反复出现却始终清不出空间
  • 在流水线机器上无节制地保留构建缓存,缓存无限增长最终导致构建失败
  • 把卷当成可随手清理的对象,误删后业务数据不可恢复

数据来源与参考

  • Docker 官方 CLI 参考:docker system df(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌