清理docker占用磁盘过大问题终极方案(亲测有效!)

 更新时间:2024年04月18日 11:05:48   作者:君问何归处?遥看在人间  
Docker很占用空间每当我们运行容器、拉取镜像、部署应用、构建自己的镜像时我们的磁盘空间会被大量占用,这篇文章主要给大家介绍了关于清理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占用磁盘过大问题终极方案的文章就介绍到这了,更多相关docker占用磁盘过大清理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Armbian5.9.0安装docker及部署可视化portainer的详细教程

    Armbian5.9.0安装docker及部署可视化portainer的详细教程

    这篇文章主要介绍了Armbian5.9.0安装docker及部署可视化portainer的详细教程,通过 ssh 进去 Armbian 系统后,输入相应代码,按提示输入y,等待安装完成即可,需要的朋友可以参考下
    2022-05-05
  • jenkins+gitlab+nginx部署前端应用实现

    jenkins+gitlab+nginx部署前端应用实现

    在日常开发中,往往可能同时多个项目并行进行开发,本文介绍了jenkins+gitlab+nginx部署前端应用实现,感兴趣的可以了解一下
    2021-05-05
  • Windows11安装Docker Desktop教程的图文教程

    Windows11安装Docker Desktop教程的图文教程

    本文主要介绍一下Windows11安装Docker Desktop教程的图文教程,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • docker-compose实现容器任务编排的方法步骤

    docker-compose实现容器任务编排的方法步骤

    本文主要介绍了docker-compose实现容器任务编排的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Docker部署Python应用的方法实现

    Docker部署Python应用的方法实现

    在云服务使用越来越普及的趋势下,很多应用在考虑成本和、可部署性、维护性方面,选择docker方案部署是一个不错的选择,本文主要介绍了Docker部署Python应用的方法实现,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • rocketmq-streams的ILeaseService使用示例详解

    rocketmq-streams的ILeaseService使用示例详解

    这篇文章主要为大家介绍了rocketmq-streams的ILeaseService使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • docker创建镜像并上传云端服务器的实现示例

    docker创建镜像并上传云端服务器的实现示例

    镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,本文介绍了如何使用Docker创建镜像,并将其上传到云端,感兴趣的可以了解一下
    2023-08-08
  • docker容器化部署及使用方式

    docker容器化部署及使用方式

    这篇文章主要介绍了docker容器化部署及使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • docker网卡的IP地址修改方法总结

    docker网卡的IP地址修改方法总结

    这篇文章主要给大家总结介绍了关于docker网卡的IP地址修改方法,文中通过实例代码介绍的非常详细,对大家学习或者使用docker具有一定的参考学习价值,需要的朋友可以参考下
    2023-06-06
  • 使用Docker搭建Redis主从复制的集群

    使用Docker搭建Redis主从复制的集群

    这篇文章主要介绍了使用Docker搭建Redis主从复制的集群,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07

最新评论