/dev/vda1磁盘空间耗尽,清理Docker后仍无法释放空间的求助
Hey Tibor,碰到这种清理完Docker还释放不了空间的情况确实挺闹心的,我给你梳理几个常见的排查方向和解决办法,你可以挨个试试:
检查Docker日志文件的隐性占用
Docker默认不会限制容器日志的大小,就算你删了容器,有些遗留的日志文件可能还躺在磁盘上占空间。你可以用这个命令找出大日志文件:find /var/lib/docker/containers -name "*.log" -exec du -h {} \; | sort -hr找到体积大的日志后,要么直接清空它(比如
truncate -s 0 /path/to/your/logfile.log),要么后续给Docker配置日志大小限制——在/etc/docker/daemon.json里添加日志驱动配置,比如设置json-file驱动的最大文件大小和保留数量,这样就不会再出现日志占满磁盘的情况了。排查Docker目录里的残留文件
有时候docker system prune可能没彻底清理干净/var/lib/docker下的残留文件,比如废弃的overlay2层、未被正确删除的挂载卷文件。你可以先看看这个目录下各子文件夹的占用情况:du -sh /var/lib/docker/*如果发现某个文件夹(比如overlay2或者tmp)还有不少占用,先停掉Docker服务:
systemctl stop docker然后手动删除那些确认没用的残留文件(记得先确认没有正在运行的重要容器,必要的话可以先备份),删完再重启Docker:
systemctl start docker确认是否是系统其他文件占用了空间
说不定不是Docker的锅,系统本身的临时文件、系统日志或者其他应用也可能占了不少空间。你可以用这些命令排查:- 查看根目录下各文件夹的大小:
du -sh /*,定位到占用最大的文件夹 - 检查系统日志的占用:
journalctl --disk-usage,如果太大可以清理旧日志:journalctl --vacuum-size=1G(这里的1G可以根据你的需求调整) - 清理/tmp目录下的过期文件:
rm -rf /tmp/*(注意别删正在被使用的文件)
- 查看根目录下各文件夹的大小:
检查Overlay2的孤立镜像层
偶尔会出现一些未被任何镜像或容器引用的孤立overlay2层,docker system prune可能没识别到。你可以先试试用这个命令预览会清理的镜像层:docker image prune -a --dry-run如果显示有可以清理的内容,直接去掉
--dry-run执行清理;要是还是不行,就先停Docker,然后手动检查/var/lib/docker/overlay2目录,删除那些没有关联镜像的文件夹(这个操作要谨慎,最好先确认每个文件夹的用途)
备注:内容来源于stack exchange,提问作者Tibor Janosi




