Docker Overlay2磁盘空间占满

前言

在日常生产环境中,我们通常会使用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目录中的占用空间较大的目录排查是否需要删除

### 清理或减少 Docker Overlay2 存储驱动占用磁盘空间 #### 了解原因 Overlay2Docker 的默认存储驱动,实现了镜像层和容器层的分层存储技术。当发现 `/var/lib/docker/overlay2` 目录占用较大时,通常是因为某些挂载的目录过大或是存在不必要的文件和日志[^1]。 #### 检查并清理无用资源 为了有效释放磁盘空间,建议先检查是否有不再使用的镜像、容器、网络或其他未被利用的资源: ```bash docker system prune -a ``` 此命令会删除所有停止的容器、未使用的网络以及悬空的镜像(即没有标签也没有容器依赖的镜像)。如果希望保留正在运行的服务而不影响它们,则可以省略 `-a` 参数[^3]。 #### 处理过大的日志文件 有时大量的日志记录也会导致磁盘使用率上升。可以通过截断现有日志或将旧日志轮转到新的位置来解决问题。对于单个容器的日志清理,可执行如下命令: ```bash sudo truncate -s 0 /var/lib/docker/containers/*/*.log ``` 这将会把所有的 JSON 日志文件大小设置为零字节,从而立即腾出大量空间。不过需要注意的是这样做可能会丢失一些有用的调试信息,在生产环境中应谨慎操作[^4]。 #### 调整配置优化长期性能 为了避免将来再次遇到同样的问题,考虑调整 Docker 守护进程和服务端口上的参数,例如通过 `daemon.json` 文件指定不同的日志级别或者启用日志旋转策略;也可以尝试更换更高效的日志驱动程序如 `journald` 或者自定义路径保存日志文件[^5]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值