Docker Overlay2磁盘空间占满

weixin_44012070 2024-08-25 14:07:05 阅读 84

前言

在日常生产环境中,我们通常会使用Docker来做容器化管理,通过运行容器来执行任务。但是,随着业务量的不断扩大,容器的不断启动,往往会出现磁盘空间不足的情况。

1、查看当前磁盘使用情况

        df -h

其中Use%过大的目录需要排查

2、进入目录,查看当前目录下的文件大小

        du -sh *

发现containers目录、overlayer2目录、volumes目录占用空间比较大

containers目录

进入某个容器目录,发现里面是Docker的日志文件

查看同级目录下的所有-json.log

du -ha /home/docker/containers/ | grep "json.log" | sort -rh

volumes目录

        进入volumes目录中,查看大小

        du -sh *

进入某个volume,查看其中内容,发现是数据卷内容,可以看情况清理

overlayer2目录

查看其中目录占用空间大小

发现其中部分目录占用空间较大,进入里面看看都由哪些东西

merged 和 diff 占磁盘空间比较大,work 目录可以不用管。

这两个文件夹内容开始是一样的 ,merged会多一些由容器本身产出的写文件,进merged继续往下找

进入./csp目录,发现其中有很多的日志文件

我这里是sentinel的日志,个人项目视情况是否删除,或者通过配置限制文件个数和大小。

3、解决方法

1、docker 镜像占用磁盘

Docker 中查询磁盘占用情况命令: docker system df

可通过执行docker system prune 命令可用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)

【慎用】 docker system prune -a 命令清理更干净、彻底,可以将没有容器使用的Docker镜像都删掉。

2、containers目录

Docker 容器的日志文件可能会增长并占用大量的磁盘空间。可以检查并删除不再需要的容器日志文件。

(1)临时方案:这个命令将删除 /home/docker/containers/ 目录下的容器日志文件。

sudo find /home/docker/containers/ -name "*-json.log" -type f -delete

(2)稳定方案:设置容器服务的日志大小上线

方式一:每个容器都可以单独设置

logging:

  driver: "json-file"

  options:

    max-size: "256m"

    max-file: "3"

 

方式二:全局设置

方式三:contab定时执行清理脚本

echo "======== start clean docker containers logs ========"

logs=$(find /home/docker/containers/ -name *-json.log)

for log in $logs

        do

                echo "clean containers logs : $log"

                cat /dev/null > $log

        done

echo "======== end clean docker containers logs ========"

 

3、volumes目录

可通过命令删除

find /var/lib/docker/volumes -type f -name "*.log" -delete

3、overlayer2目录

通过排查overlayer2下merged目录中的占用空间较大的目录排查是否需要删除



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。