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}}' # 自定义列四类对象怎么读
| 类型 | 包含什么 | 常见增长原因 |
|---|---|---|
| 镜像 | 本地所有镜像与标签 | 频繁构建同名标签、拉取多个版本未清理 |
| 容器 | 容器的可写层 | 日志写入未轮转、容器内写临时文件 |
| 本地卷 | 命名卷与匿名卷的数据 | 数据库与上传目录长期增长,未做归档 |
| 构建缓存 | 历史构建产生的中间层 | 流水线反复构建且未设置缓存上限或清理策略 |
按结果决定动作
- 镜像占大头且存在悬空镜像:清理无标签的悬空层收益最直接
- 容器可写层占大头:先查是不是日志没轮转,光删容器治不了根
- 卷占大头:这类是真实业务数据,要按业务保留策略归档,不能随手删
- 构建缓存占大头:给构建器设置缓存上限,比反复手工清理更省事
- 四类都不大但磁盘仍满:说明空间被宿主其他目录占用,要换排查方向
可回收量是估算值:镜像之间共享层,容器与卷之间还有引用关系,实际能清出的空间往往小于这个数字。
卷与构建缓存容易藏在两个大类里被忽略。只清镜像对磁盘的缓解常常有限,看到数字前先展开明细确认占比。
把清理做成常态
- 给构建器设置缓存上限,让缓存自己滚动淘汰,而不是等磁盘报警再手工清
- 日志统一配置轮转,可写层就不会因为写日志无限膨胀
- 卷的保留按业务要求定周期,归档与删除分开授权,避免运维顺手清理业务数据
- 巡检里加入占用检查,把数字变化纳入监控,比人肉盯着服务器可靠
- 清理前先确认可回滚:要留的旧版本先推到仓库或导出,删了本地就没有退路
和宿主磁盘的关系
- 容器引擎的数据根目录通常位于系统盘,规划时要把它单独考虑,别与业务数据挤在同一个小分区
- 镜像分层共享,物理文件往往比各镜像体积之和小很多,判断真实占用要看这个命令的数字
- 可写层删除后空间才释放,容器停止但未删除时占用依旧存在
- 宿主其他目录被写满时,容器运行也会报错,这类问题与本命令显示的数字无关
- 把数据根目录迁移到独立磁盘前要先停服务,避免迁移过程中出现半截状态