清理docker占用磁盘过大问题终极方案(亲测有效!)
背景
在笔者的工作测试环境中,使用过程中突然出现根磁盘快吃满了(docker也是使用的根池盘的/var/lib/docker), wtf ? 服务用不了?
当然网上找到了一些常规的清除docker 日志文件,清理后但是通过df -hT 查看到overlay 卷还是占有超过70%的盘。通过下图可以知道df -h 执行的结果 和 du -sh * 发现/var/lib/docker/overlay2对比占用差距巨大,"du -sh *" 算出的实际不是很大,但是通过 df -h 查看到 /var/lib/docker/overlay2/{id}/merged 这个目录挂载占用了很多。
为何差距如此巨大?这里面肯定存在一些容器系统实际占有的,但是比新部署的多了200G+的盘,可能也有统计问题/缓存占有的(这里我也不清楚原因到底多出来的是怎么发生的,可能是操作系统统计问题?初步猜测是overlay2 没有覆盖内核的数据,希望有大神指点),翻遍文献,经过无数次测试后总结了下面的步骤,亲测有效。

清理方案
1. 由于是根磁盘所以第一件事情是清理磁盘的其它文件,比如日志,不要的文件
find / -size +1G -type file
通过这个命令找打文件大 且多的不要文件,然后一一删除掉。
2. 在第一步清理之后开始清理docker 日志文件
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"
这个是抄的同行的,太懒了 懒得写了。
3. 清理docker tmp 文件 目录在/var/lib/docker/tmp ,接下来怎么做你懂的。
4. 清理dockers 系统的文件 比如 镜像 和 卷,执行下面两个命令
docker system prune -a docker volume prune
5. 解决上面提到的问题(overlay2 占用磁盘过大不释放),在容器/etc/docker/daemon.json 添加如下代码
{
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=1"
]
}
如果没有daemon.json文件就新增一个同名文件。最后重启docker。
systemctl stop docker systemctl start docker
6. 有可能是nexus 或者gitlab 或者harbor 这类的连接占磁盘 所有在做上面步骤之前可以先停一下。
组后效果比上图好很多free 从几十G 变成300G+

写下这个的目的,发现网上的文章不全,或者就没有效果,希望后来者更容易解决问题!看到这里就给个赞呗!!!!
补充:还有一种情况 overlay2 目录过大 ,没有挂卷 导致docker runtime 文件持续写入,在宿主机看到overlay2 某个目录特别大, 请参考这位作者的。
https://www.jb51.net/server/319811wb5.htm
通过docker overlay2 目录名查找对应容器名
总结
上一篇:docker安装、调试qsign签名服务器的解决方案
栏 目:其它服务器
本文标题:清理docker占用磁盘过大问题终极方案(亲测有效!)
本文地址:https://zz.feitang.co/server/28518.html
您可能感兴趣的文章
- 12-22nginx代理实现静态资源访问的示例代码
- 12-22Docker 存储管理的几种方式
- 12-22nginx静态资源的服务器配置方法
- 12-22Docker Compose部署微服务项目上线功能
- 12-22GPU服务器的多用户配置方法
- 12-22docker-compose搭建etcd集群的实现(三节点)
- 12-22docker中mysql开启日志的实现步骤
- 12-22Linux下docker安装mysql8并配置远程连接
- 12-22docker部署mysql8并设置可远程连接
- 12-22阿里云oss对象存储使用详细步骤


阅读排行
推荐教程
- 12-11docker存储目录迁移示例教程
- 12-10docker start启动容器后仍然exit状态的解决
- 12-10Linux下如何安装Logstash
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法
- 12-13k8s编排之Deployment知识点详解
- 12-13Nginx IP封禁及自动封禁IP的实现
- 12-13Nginx代理Partainer如何使用





