【已解决】docker overlay2占用大量磁盘空间处理方法

在使用docker容器的时候遇到了容量上的问题,做一个记录

处理方式1:

在使用docker时,往往会出现磁盘空间不足,导致该问题的通常原因是因为docker中部署的系统输出了大量的日志内容。

此时,可通过手动或定时任务进行清除。

针对/var/lib/docker/overlay2空间占用很大网上提供了很多解决方案,其中有些误导的说法需要去迁移路径等操作。其实磁盘空间的占用和overlay没关系(它的usage和真实的disk usage相同),它只是一个docker的虚拟文件系统,真实的文件系统是前者/dev/vda1,可以看到路径所指为根目录,所以你要去找是哪里出现了垃圾。

通常情况下与overlay2的同级目录下会有如下的目录:

[root@iZ docker]# ls
builder  buildkit  containerd  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes

在目录中会存在以目录名为前缀,以“-json.log”为后缀的目录文件。使用如下命令会看到该文件的大小:

ll -h

然后可使用如下命令对该文件的内容进行清理:

cat /dev/null > *-json.log

清理完成可不重启服务,但如果允许建议重启一下docker服务。

在此执行df -h命令之后,你会发现overlay2所占的磁盘空间已经减小。

关于清理的操作可参考文章:《LINUX CENTOS /VAR/LIB/DOCKER/CONTAINER目录导致系统存储爆满,占用大量存储解决方案》

原文链接:《docker overlay2占用大量磁盘空间处理方法》.

处理方式2:

排错过程

df -h

发现硬盘被占满了

再用下面命令查看哪个文件夹太大:

du -sh *

发现是 /var/lib/docker/overlay 占满了

网上查一下这个目录的作用,说是 overlay/overlay2表示Docker的存储驱动,可以参考一下这篇文章:https://blog.csdn.net/styshoo/article/details/60715942

也就是说容器/镜像等都会存在这个目录下,当量大的时候就会占满硬盘

也可以参考官网(https://docs.docker.com/storage/storagedriver/overlayfs-driver/

继续在网上搜资料,说可以看看是不是死掉容器过多的原因,使用 docker ps -a看了下,果然是。于是清理了一下无用的容器,硬盘就恢复正常了……

简单办法

多看了一下资料,发现可以使用 docker system prune来自动清理空间,参考下面:

  • 该指令默认会清除所有如下资源:
    • 已停止的容器(container)
    • 未被任何容器所使用的卷(volume)
    • 未被任何容器所关联的网络(network)
    • 所有悬空镜像(image)。
  • 指令默认只会清除悬空镜像,未被使用的镜像不会被删除。
  • 添加 -a 或 --all 参数后,可以一并清除所有未使用的镜像和悬空镜像。
  • 可以添加 -f 或 --force 参数用以忽略相关告警确认信息。
  • 指令结尾处会显示总计清理释放的空间大小。
    https://yq.aliyun.com/articles/272173

另外,使用下面命令可以查看docker所占的硬盘大小,如:
在这里插入图片描述

使用docker,基本上把官方文档的入门教程看完,就能用了。
再自己打个包试试,基本上就OK了。后面遇到问题再深入,都可以。

docker的/var/lib/docker/overlay文件夹突然占满了硬盘

### 清理或减少 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]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cry丶

如果觉得有帮助的打个赏吧。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值