这个坑值得记一笔。docker images 列出来加起来只有二十 G,du -sh /var/lib/docker 却显示九十 G,根分区一直在告警,构建新镜像也失败。

真正麻烦的地方在于,几个原因的现象几乎一样。大量已退出容器和悬空镜像堆着没有清理;容器日志写在 json-file 驱动里,没有设置任何大小上限;构建缓存 build cache 一直在累积,没人注意它的存在。

动手时先看 docker 的占用明细

docker system df -v | head -20

接着清理悬空镜像和停止的容器

docker system prune -af

然后查日志驱动和上限配置

cat /etc/docker/daemon.json

等前面都确认过,再重启 docker 让日志上限生效

systemctl restart docker

中途换过一次思路,把范围缩到最小的那一层,反而快了。

别只看报错消失,验证要多做一步。docker system df 里可回收空间接近零,df -h 显示根分区使用率明显下降,新建容器的日志也受上限约束。

补一句。prune 带 -a 会删掉没在运行的容器,有状态服务要先确认卷的挂载位置;更彻底的做法是把 data-root 迁到独立数据盘。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189