Docker镜像拉取后内存占用异常暴涨及磁盘分区高占用问题排查求助
Docker镜像拉取后内存占用异常暴涨及磁盘分区高占用问题排查求助
嘿,这种明明拉了个小镜像却占了巨量磁盘的情况确实挺闹心的,我来帮你梳理下可能的原因和排查解决步骤:
第一步:先锁定是不是Docker在搞事情
首先得确认/dev/nvme0n1p5的高占用是不是Docker相关的,直接用Docker自带的命令看全局占用:
- 运行
docker system df,这个命令会清晰列出镜像、容器、卷、构建缓存各自的空间占用情况。很多时候不是你刚拉的小镜像的问题,而是之前遗留的未使用容器、冗余镜像或者堆积的构建缓存在偷偷占空间。 - 如果发现是构建缓存占了大头,直接用
docker builder prune清理;要是冗余镜像/容器多,用docker system prune -a清理(注意:这个命令会删掉所有未被容器使用的镜像和停止的容器,执行前最好确认哪些是你需要保留的)
第二步:排查容器日志爆炸的情况
很多容器运行时会疯狂生成日志,尤其是一些后台服务容器,日积月累能占几十上百G:
- 你可以去Docker默认的日志目录
/var/lib/docker/containers/里,找到对应容器ID的文件夹,查看里面的.log文件大小。如果确实是日志太大,临时救急可以用truncate -s 0 /var/lib/docker/containers/<容器ID>/*.log清空日志。 - 长期解决的话,建议配置Docker日志轮转,编辑
/etc/docker/daemon.json(没有就新建),加入以下配置:
保存后重启Docker服务:{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }systemctl restart docker,这样日志就会自动限制大小,最多保留3个10M的日志文件。
第三步:检查Docker持久化卷的占用
如果你的容器挂载了持久化卷,卷里可能存了大量数据(比如数据库备份、用户上传的文件):
- 用
docker volume ls列出所有卷,然后用docker volume inspect <卷名>找到卷在本地的实际路径,再用du -sh <路径>查看卷的大小。没用的卷可以直接用docker volume rm <卷名>删除。
第四步:排除非Docker的系统占用
毕竟/dev/nvme0n1p5是系统分区,也可能是其他程序在占空间:
- 先用
df -h确认这个分区的总占用比例,然后用du -sh /*找出根目录下哪个文件夹占空间最大,再逐层深入排查,看看是不是系统日志、其他应用的缓存或者大文件导致的。
另外补充个小知识点:Docker镜像采用分层存储,你看到的小镜像可能依赖了较大的基础镜像,但这种情况一般不会突然占100G,所以大概率还是前面提到的缓存、日志、卷的问题。
一步步排查下来,应该能找到问题根源啦!
备注:内容来源于stack exchange,提问作者xs_william




