引言:/var/lib/docker 爆满的困境
在使用 Docker 的过程中,你是否遇到过服务器磁盘空间突然被占满的“灾难”?尤其是当你执行 docker images 时,却发现镜像体积看似正常,却无法解释 /var/lib/docker 目录的异常膨胀?这种问题的根源往往隐藏在 容器的可写层 中——一个被忽视的“隐形杀手”。
本文将带你深入排查 Docker 容器磁盘空间占用的真相,并提供从诊断到清理的完整解决方案。
一、Docker 磁盘空间的构成
Docker 的磁盘空间主要由以下组件占用:
- 镜像(Images):基础镜像
- 容器(Containers):容器运行时产生的可写层
- 卷(Volumes):持久化数据的存储
当 /var/lib/docker 爆满时,90% 的情况与 镜像或容器的可写层有关。以下是关键排查步骤。
二、定位问题:容器的“双面数据”
查看 Docker 整体磁盘使用
docker system df
RECLAIMABLE 列:显示可回收空间比例,若数值高,则说明存在大量可清理资源。
深入查看容器磁盘占用
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Size}}"
关键概念解析:
1.29MB(前值需关注):容器的可写层大小
这是容器运行时产生的增量数据,包括:
- 容器内修改的文件(如日志、缓存)
- 安装的新软件包
- 持久化数据(如果未挂载卷)
- 临时文件或未清理的中间产物
576MB(后值):容器的镜像大小
这是容器所依赖的镜像总和(包括所有基础层),即使多个容器共享同一镜像,每个容器的 VIRTUAL SIZE 会重复计算。
如何查找问题容器?
- 可写层异常大:例如 5GB 的可写层远超预期。
- 未正确挂载卷:本应持久化的数据直接写入容器文件系统。

即便一个服务器上的容器有数百个,使用上述方法,只用30秒便找到了问题容器
三、清理方案:释放被占用的空间
- 删除有问题的容器,进行重建: docker rm <容器名>
- 删除未使用的镜像: docker image prune -a
- 删除未使用的匿名volume :docker volume prune
四、监控与预警
使用 Prometheus/Influxdb + Grafana 监控 Docker 磁盘(/var/lib/docker)使用情况,设置阈值告警。
结语:从“爆满”到“可控”
Docker 的磁盘空间问题并非不可解,关键在于理解容器的“双面数据”——镜像的虚拟大小与可写层的增量占用。通过系统化的排查和预防措施,可以将 /var/lib/docker 的“隐形杀手”转化为可控资源,让 Docker 环境高效运行。

被折叠的 条评论
为什么被折叠?



