docker磁盘爆满,linux docker /var/lib/docker/overlay2占用磁盘原因分析

问题描述

提示:这里描述项目中遇到的问题:

某天发现自己的博客网站挂掉了。上腾讯云发现是磁盘已经满了
在这里插入图如图片描述

原因分析:

一般原因有下列几种情况,逐步分析即可
1.docker镜像占用磁盘
2.docker日志
3./var/lib/docker/overlay2下的容器文件(主要)

解决方案:

一、docker镜像占用磁盘

这种情况先使用 docker images 对象查看有哪些镜像,可以手动删除一些很大不用的,也可以用下面的命令批量删除无用的镜像。

这个命令会删除未被任何容器使用的镜像。

docker image prune   //删除不再使用的镜像

`删除未使用的资源(容器、镜像、卷和网络等)

docker system prune   //这个命令会删除所有未使用的 Docker 资源,包括容器、镜像、卷和网络等

二、docker日志

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

这个命令将删除 /var/lib/docker/containers/ 目录下的容器日志文件。

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

docker日志linux中由服务产生的日志(重要)

这个命令将直接列出linux中大于100M的文件。

find / -size +100M -type f   

在这里插入图片描述
可以看到大量的日志文件跟jar包,又是一大波能清理的。

三、/var/lib/docker/overlay2下的容器文件(主要)

执行以上方法清除镜像跟大日志后发现,才释放了四个G
在这里插入图片描述

说明根本原因在于overlay2下,于是可以利用以下命令一步步找出根源所在。

/var/lib/docker/overlay2 目录下的大文件是Docker镜像或容器的层(layers)。这些层可能是由于之前的Docker容器未正确清理或删除,导致残留的层文件。

//进入docker目录
cd /var/lib/docker  
//检索文件的最大深度1,即只检索汇总计算当前目录下的文件
du -h --max-depth=1  

在这里插入图片描述

执行后发现确实是overlay2下占用最大(此处有些人也可能是volumes占用很大),根据情况继续往下找,这里我就进入overlay2往下找

![在这里插入图片描述](https://img-blog.csdnimg.cn/59e025f5f8804a14a38efae6a82ee148.png在这里插入图片描述

发现有很多容器,仔细发现有几个占用特别大,于是先用命令吧大文件过滤出来

du -h --max-depth=1 --threshold=5G  //只显示大于5GB的文件和目录的磁盘使用情况

在这里插入图片描述

执行发现三个7G的文件夹,我们首先进入第一个文件夹看看到底是哪些文件这么大,继续往下找

在这里插入图片描述

这里出现了两个docker比较重要的文件夹

  1. diff 文件夹: diff 文件夹是一个只读的文件系统层,它包含了Docker镜像的变更内容。当您对容器进行修改或添加新文件时,这些变更会被记录在 diff 文件夹中。每个Docker镜像都有一个对应的 diff 文件夹,用于存储与基础镜像的差异
  1. merged 文件夹: merged 文件夹是一个可读写的文件系统层,它是由基础镜像和 diff 文件夹合并而成的。当您启动一个Docker容器时, merged 文件夹中的内容将作为容器的文件系统。这个文件夹是容器运行时的可写层,您可以在容器中对文件进行修改或添加新文件,这些修改将存储在 merged 文件夹中。

综上所述 这两个文件夹内容是一样的 merged会多一些由容器本身产出的写文件,进merged继续往下找
在这里插入图片描述

终于发现最里面果然还是一些log日志文件,虽然不大但是却耐不住很多。
在这里插入图片描述

sentinel-record.log.2023-01-25.0 文件是Redis Sentinel的日志文件。Redis Sentinel是Redis的高可用性解决方案之一,用于监控和管理Redis主从复制和故障转移。

sentinel-record.log 文件包含了Redis Sentinel的运行日志,记录了Sentinel的各种操作、事件和状态信息。这些日志对于故障排查、性能监控和系统运维非常有用。

可以根据需要删除 sentinel-record.log 文件。然而,在删除之前,请确保您不再需要这些日志文件,或者已经备份了重要的日志信息。另外,您还可以考虑将日志文件进行归档或定期清理,以便释放磁盘空间并保持系统的性能。

由于我是自己的项目,所以这些日志文件统统删除。 删除后可以修改配置限制其日志大小跟数量
对于Sentinel的日志文件,您可以通过配置来限制其大小和生成的数量。以下是一些常用的方法:

  1. 日志文件大小限制:您可以通过修改Sentinel的配置文件来设置日志文件的大小限制。在Sentinel的配置文件(通常是 sentinel.conf )中,可以找到日志相关的配置项,例如 logfile-maxsize 。您可以将其设置为所需的大小,以限制日志文件的大小。例如,设置为 logfile-maxsize 10MB 表示日志文件的大小限制为10MB。
  1. 日志文件数量限制:您可以通过设置日志文件的数量来限制生成的日志文件数量。在Sentinel的配置文件中,可以找到类似于 logfile-max-nums 的配置项。您可以将其设置为所需的数量,以限制生成的日志文件数量。例如,设置为 logfile-max-nums 10 表示最多生成10个日志文件。
  • 20
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Docker 的 /var/lib/docker/overlay 目录用于存储 Docker 镜像层和数据卷的数据。如果这个目录的空间占用过多,可能是因为有太多的镜像层或数据卷被保留,或者有容器在运行时生成了大量的数据。要减少 /var/lib/docker/overlay 目录的空间占用,可以尝试以下方法: 1. 删除不再使用的镜像: ``` docker image prune ``` 2. 删除不再使用的数据卷: ``` docker volume prune ``` 3. 停止并删除不再使用的容器: ``` docker stop <CONTAINER_ID> docker rm <CONTAINER_ID> ``` 4. 使用 docker-gc 工具来自动清理不再使用的容器、镜像和数据卷: ``` docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc:ro spotify/docker-gc ``` 可以根据自己的情况选择适当的方法来解决空间占用过多的问题。 ### 回答2: docker的/var/lib/docker/overlay/目录是用来存储容器的镜像和数据的,默认情况下,它会占用较多的磁盘空间。 首先,你可以使用docker的清理命令来释放一些不再使用的镜像和容器,以减少磁盘空间占用。例如,可以使用以下命令来删除所有停止的容器: ``` docker container prune ``` 此外,你还可以删除不再使用的镜像: ``` docker image prune ``` 这些命令会删除停止的容器和未被使用的镜像,从而释放占用磁盘空间。 另外,你还可以考虑使用docker的卷来存储一些较大的数据,以减少/var/lib/docker/overlay/目录的空间占用。使用docker卷,你可以将容器的数据存储在宿主机的其他位置,从而减少/var/lib/docker/overlay/目录的占用。 首先,你可以创建一个卷: ``` docker volume create my_volume ``` 然后,在运行容器时,将卷挂载到容器的指定目录: ``` docker run -v my_volume:/path/to/mount some_image ``` 这样,容器的数据就会存储在卷中,而不会占用/var/lib/docker/overlay/目录的空间。 最后,你还可以考虑调整docker的存储驱动。默认情况下,docker使用overlay2作为存储驱动,但是这种驱动可能会占用较多的磁盘空间。你可以尝试使用其他的存储驱动,如aufs或btrfs,以减少磁盘空间占用。 总之,通过清理不再使用的镜像和容器、使用docker卷来存储数据,以及调整存储驱动,你可以减少/var/lib/docker/overlay/目录的空间占用。 ### 回答3: 当Docker的/var/lib/docker/overlay目录占用过多空间时,可能是由于以下原因导致的: 1. 镜像和容器积累过多:Docker会保存所有使用过的镜像和容器的数据,并存储在overlay目录中。如果不定期清理过期或不再使用的镜像和容器,会导致该目录占用过多空间。可以使用docker rm和docker rmi命令删除不再需要的容器和镜像。 2. 日志文件过多:Docker的日志文件默认储存在overlay目录下。如果日志文件很大或过多,会占用大量空间。可以在Docker的配置文件中更改日志文件的位置,或者定期删除旧的日志文件。 3. 容器数据持久化:在某些情况下,容器的数据会持久化保存在overlay目录中,如果数据量很大,可能会占用大量空间。可以考虑将数据保存在其他位置,或使用Docker Volume来管理容器的数据。 4. 容器卷未及时清理:如果在容器内使用了数据卷,且没有及时清理不再使用的数据,也会导致overlay目录占用空间过多。可以使用docker volume rm命令删除不再使用的数据卷。 为解决以上问题,可以使用以下方法: 1. 定期清理不再使用的容器和镜像,使用docker rm和docker rmi命令。 2. 定期清理旧的日志文件,可以更改日志文件的位置或定期删除。 3. 考虑将容器的数据保存在其他位置,或使用Docker Volume管理数据。 4. 及时清理不再使用的数据卷,使用docker volume rm命令。 通过上述方法进行合理管理和清理,可以减轻/var/lib/docker/overlay目录占用空间过多的问题,并保持Docker的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值