首页/云/云与容器速查/Docker 磁盘占满排查

Docker 磁盘占满排查

宿主磁盘被 Docker 吃满:镜像层、日志、数据卷、构建缓存是四大来源。docker system df -v 先定位大头,再做有选择的清理而不是无脑 prune。

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

Docker 磁盘占满怎么查

宿主磁盘被 Docker 吃满,来源基本上是四类:镜像层堆积、容器日志、数据卷膨胀、构建缓存。正确做法是先定位再清理:用 docker system df 分类看占用,再用 du 下钻到具体目录,确认大头之后再选择对应的清理手段。上来就执行全量清理命令,既可能清不到真正的大头,也可能误删业务数据。

基本信息

定位工具docker system df -v 按镜像、容器、卷、缓存分类看占用
日志大头/var/lib/docker/containers 下的 json 日志未设上限会无限增长
镜像清理image prune 清悬空,加 -a 清所有未被引用的镜像
卷清理volume ls 过滤未被使用的卷,确认用途后再删
根治方向设置日志上限、把数据卷挂到大容量盘、建立定期清理机制

典型使用场景

  • 磁盘告警:宿主使用率快速上涨,需要先定位是镜像还是日志
  • 拉取失败:镜像拉取报空间不足,需要临时腾出容量
  • 日志暴涨:某个服务大量打印日志把分区写满,影响所有容器
  • 发布受阻:构建缓存占满空间导致构建失败
  • 容量规划:把数据卷迁到独立大盘,避免与系统盘争空间

排查命令

排查命令
docker system df -v | head -30               # 分类查看占用与可回收量
du -sh /var/lib/docker/* | sort -h | tail     # 下钻到具体子目录
# 定位增长最快的容器日志
du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail
# 查看宿主分区真实剩余空间
df -h /var/lib/docker
# 清理顺序建议:日志与构建缓存 → 悬空镜像 → 未被引用的镜像 → 卷(最后)

四类来源与处置

来源典型表现处置方式
镜像层镜像数量多、大量悬空层image prune,清理未使用镜像
容器日志单个 json 日志文件异常巨大调小上限并轮转,重启对应容器
数据卷卷数量多、单个卷持续增长确认用途后再删,勿盲清
构建缓存CI 机器上增长最快builder prune 定期清理
清理顺序很重要:先日志与构建缓存,再悬空镜像,最后才考虑数据卷。卷一旦删除,业务数据无法恢复。
只清理不治日志上限,过几天还会满。给日志驱动设置单文件大小与文件数上限,把数据卷挂到容量充足的数据盘,才是根治做法。

易错点

  • 直接执行全量清理并带卷参数,删到在用的卷造成数据事故
  • 只删镜像不治日志上限,几天后磁盘再次告警反复救火
  • 只看 Docker 占用而忽略宿主其他目录与日志,定位方向就错了
  • 数据卷落在系统盘,卷膨胀后直接影响系统写入甚至导致宕机

数据来源与参考

  • Docker Docs:docker system df
  • Docker Docs:Prune unused objects

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌