记录一次docker Overlay2占用磁盘空间99%的清理过程

昨天发现项目突然挂了,客户也反馈过来项目登陆后数据都是空的,急忙看了一下各种相关服务均是正常的,在觉得奇怪时,只能从头排查,我们的数据源头会先经过redis 漏斗,登陆redis工具发现报错:

MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.

可以看出是磁盘空间不足的问题;

清理第一步

登陆服务器,看到空间占比情况

df -h


可以看到overlay占比达到了99%,用了300多个G,果断进入 /var/lib/docker/overlay2

清理第二步

执行

cd /var/lib/docker/overlay2
du -h --max-depth=1 --threshold=5G  # 查看当前文件夹下大于5G的文件夹及文件

可以看到占比最大的是在这个1755415a… 这个文件夹,再进入到这个文件夹查看情况。

cd 1755415a..
du -sh *  // 查看当前文件夹下占用空间分布

扩展:
diff 文件夹: diff 文件夹是一个只读的文件系统层,它包含了Docker镜像的变更内容。当您对容器进行修改或添加新文件时,这些变更会被记录在 diff 文件夹中。每个Docker镜像都有一个对应的 diff 文件夹,用于存储与基础镜像的差异。

merged 文件夹: merged 文件夹是一个可读写的文件系统层,它是由基础镜像和 diff 文件夹合并而成的。当您启动一个Docker容器时, merged 文件夹中的内容将作为容器的文件系统。这个文件夹是容器运行时的可写层,您可以在容器中对文件进行修改或添加新文件,这些修改将存储在 merged 文件夹中

根据查询结果,可以看到merged 文件夹占了很大的空间,再进入到这个文件夹:

cd merged
du -sh *


可以看到 这个 tmp 占了很大的空间,到这里差不多就把目前占用磁盘最大的问题找到了。

扩展:
tmp 它是很多程序和系统服务用于存储临时文件的默认位置。有时,这些临时文件可能会因为各种原因而未能被及时清理,从而导致 tmp 目录变得非常大。

清理第三步

进入这个tmp 文件夹,里边存放者很多 go的build文件, 因为是临时文件,所以可以删除,
一把删除掉全部,最后重启一下服务器。

最后再查看一下空间情况

df -h

基本解决了问题, 另外其他的还有一些没用的容器也可以清除掉。

有不合理操作的地方请大神指正!

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

可以设置 容器 日志文件 的大小 和数量

version: '3'
services:
  rabbitmq:
    image: 'rabbitmq:3.10.12-management'
    hostname: mq2
    container_name: rabbitmq
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
        max-file: "1"
3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!