Docker overlay2 正在占用磁盘空间

15

以下是Ubuntu Linux 18.04 LTS系统中overlay2文件系统消耗磁盘空间的情况。

服务器总磁盘空间为125GB。

overlay         124G  6.0G  113G   6% /var/lib/docker/overlay2/9ac0eb938cd2a50bb87e8ed13605d3f09214fdd9c8967f18dfc3f9432701fea7/merged
overlay         124G  6.0G  113G   6% /var/lib/docker/overlay2/397b099799212060ee7a4718660aa13aba8aa1fbb92f4d88d86fbad94e572847/merged
shm              64M     0   64M   0% /var/lib/docker/containers/7ffb129016d187a61a31c33f9e468b98d0ac7ab1771b87631f6caade5b84adc6/mounts/shm
overlay         124G  6.0G  113G   6% /var/lib/docker/overlay2/df7c4acee73f7aa2536d2a8929a48241bc8e92a5f7b9cb63ab70cea731b52cec/merged
5个回答

11

如果上述解决方法无效,另一种解决方案是设置日志轮换。

nano /etc/docker/daemon.json

如果没有找到

cat > daemon.json

请将以下内容添加到文件中:

{
"log-driver": "json-file",
"log-opts": {
    "max-size": "10m",    
    "max-file": "3"    
    }
}

重新启动Docker守护进程:systemctl restart docker

请参阅:如何在安装后设置日志轮换


1
那确实帮了我大忙!https://stackoverflow.com/questions/66410156/ - Lopofsky

8
如果其他人遇到了这个问题,以下是发生的情况:
您的容器可能会将数据(日志、可部署文件、下载等)写入其本地文件系统,覆盖2会在每次追加/创建/删除时创建差异,因此容器文件系统将不断增长,直到填满主机上所有可用空间。
有一些解决方法不需要更改存储驱动程序:
1. 首先确保容器保存的数据可以被丢弃(您可能不想删除您的数据库或任何类似的东西) 2. 定期停止容器,修剪系统docker system prune,然后重新启动容器 3. 确保容器不向其本地文件系统写入,但如果无法避免: 4. 用卷或挂载替换容器写入的任何目录。

定期停止托管正在运行的服务的容器并不能真正帮助操作。需要一个更长久的解决方案。 - Young Emil
当我尝试这样做时,命令会警告我它将删除“所有已停止的容器”。所以停止容器然后运行清理操作会删除容器,对吗? - undefined
可以的。只要你能再次拉取/构建它们就可以了!RTM:https://docs.docker.com/engine/reference/commandline/system_prune/ - undefined

2
如果您因为 /var/lib/docker/overlay2 目录占用了太多空间(使用 du 命令检查空间使用情况),那么下面的答案可能适合您。
  1. docker xxx prune 命令将清理一些未使用的内容,例如所有已停止的容器(在 /var/lib/docker/containers 中),已停止容器的虚拟文件系统中的文件(在 /var/lib/docker/overlay2 中),未挂载的卷(在 /var/lib/docker/volumes 中)以及没有相关容器的镜像(在 /var/lib/docker/images 中)。但是所有这些都不会触及正在运行的容器。

  2. 在配置中限制日志大小将限制 /var/lib/docker/containers/*/*-json.log 的大小,但不涉及 overlay2 目录。

  3. 您可以在 /var/lib/docker/overlay2/<hash>/ 中找到两个名为 mergeddiff 的文件夹。如果这些文件夹很大,则表示容器本身的磁盘使用率很高,而不是 Docker 主机。在这种情况下,您必须连接到相关容器的终端,查找容器中高使用率的位置,并采取自己的解决方案。

就像 Nick M 所说的那样。


0

我在docker swarm上遇到了类似的问题。 使用 docker system prune --volume 命令清理系统、重启服务器,移除swarm stack并重新创建也没有帮助。

我的情况是我正在托管RabbitMQ,其中 docker-compose 配置如下:

services:
  rabbitmq:
    image: rabbitmq:.....
    ....
    volumes:
      - "${PWD}/queues/data:/var/lib/rabbitmq"

在这种情况下,每次容器重新启动、每次服务器重启,只要导致rabbitmq容器重新启动的所有操作都会占用越来越多的硬盘空间。
初始值:
ls -ltrh queues/data/mnesia/ | wc -l
61

du -sch queues/data/mnesia/
7.8G    queues/data/mnesia/
7.8G    total

重启后:

ls -ltrh queues/data/mnesia/ | wc -l
62

du -sch queues/data/mnesia/
8.3G    queues/data/mnesia/
8.3G    total

我的解决方案是停止RabbitMQ并删除queues/data/mnesia/目录。然后重新启动RabbitMQ。

也许我的配置有问题...但如果你遇到这样的问题,值得检查一下容器的卷是否留下了一些垃圾。


-1
如果您的服务器是Linux Ubuntu 18.04 LTS(其他版本也应该适用),请按照以下步骤操作:
关于Overlay2的Docker信息。
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true

如果您输入 df -h --total 后出现以下行:
19M /var/lib/docker/overlay2/00d82017328c49c661c78ce14550c4073c50a550fe5004911bd3488b085aea76/diff
5.9M /var/lib/docker/overlay2/00e3e4fa0cbff7c242c38cfc9501ef1a523158d69b50779e08a773e7e22a01f1/diff
44M /var/lib/docker/overlay2/0e8e7e893b2c8aa17b4875d421670e058e4d97de066c970bbeab6cba566a44ba/diff
28K /var/lib/docker/overlay2/12a4c4e4877d35e9db657e4acff32e513042cb44119cca5c43fc19ad81c3915f/diff
............
............

然后按照以下步骤进行更改:

首先停止docker:sudo systemctl stop docker

接下来:进入路径/etc/docker

检查文件daemon.json,如果找不到

cat > daemon.json

并在其中输入以下内容:

{
  "storage-driver": "aufs"
}

并关闭

最后重新启动docker:sudo systemctl start docker

检查更改是否已生效:

Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 0
Dirperm1 Supported: true

改变文件系统可以帮助你解决这个问题。
请检查您的Docker版本是否支持aufs在这里
请检查Linux发行版和支持的存储驱动在这里

7
现在这是错误的建议。AuFS 在19.03版本已经被废弃了。 - Sultan Dadakhanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接