Docker overlay2文件夹吃盘

问题描述 投票:0回答:4

我对 docker overlay2 文件夹有问题。

当我在撰写本文时输入 du -sj /var/lib/docker/overlay2 时,它显示:

85G overlay2/

并且它不断成长。 我尝试使用以下命令来修剪系统:

docker system prune -a

但是输出是:

Total reclaimed space: 0B

我还尝试将 max-filemax-size 添加到我的 docker compose 中。添加这些行后,我重新创建了容器。但问题仍然存在,有什么办法可以解决它,只是为了停止占用磁盘空间吗?

编辑:

码头工人信息:

服务器:
容器:10
跑步:10
暂停:0
已停止:0
图片:6
服务器版本:19.03.8
存储驱动程序:overlay2
支持文件系统:
支持 d_type: true
原生覆盖差异:true
日志驱动程序:json-file
Cgroup 驱动程序:cgroupfs
插件:
音量:本地
网络:桥接主机 ipvlan macvlan null 覆盖
日志:awslogs fluidd gcplogs gelf Journald json-file local \logentries splunk syslog
群:不活动
运行时:runc
默认运行时:runc
初始化二进制文件:docker-init
容器版本:7ad184331fa3e55e52b890ea95e65ba581ae3429
runc版本:dc9208a3303feef5b3839f4323d9beb36df0a9dd
初始化版本:fec3683
安全选项:
装甲
秒补
配置文件:默认
内核版本:4.15.0-91-generic
操作系统:Ubuntu 18.04.4 LTS
操作系统类型:linux
架构:x86_64
CPU:32
总内存:62.86GiB
名称:机器
ID: TRX2:AJZG:LNJF:UCPW:MQQB:2PLR:R7KM:VHEV:KBOG:IBT4:JX4R:WR6V
Docker 根目录:/var/lib/docker
调试模式:假
注册表:https://index.docker.io/v1/\ 标签:
实验:假
不安全的注册表:
127.0.0.0/8
启用实时恢复: false\

docker 图像:(出于安全原因,我不会显示名称)

TAG IMAGE ID CREATED SIZE
latest 667ac029b200 2 years ago 7.6GB
latest cb9df5aac4ac 2 years ago 12.9GB
latest d445c0adc9a5 3 weeks ago 220MB
latest 227d9f0554d3 2 years ago 1.34GB
latest b80092729008 2 years ago 758MB
latest f32a97de94e1 2 years ago 25.8MB
docker devops
4个回答
5
投票
#!/bin/bash
# Remove exited containers
/usr/bin/docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rm -v

# Remove dangling images
/usr/bin/docker images -f "dangling=true" -q | xargs --no-run-if-empty docker rmi

# Remove unused images
/usr/bin/docker images | awk '/ago/  { print $3}' | xargs --no-run-if-empty docker rmi

# Remove dangling volumes
/usr/bin/docker volume ls -qf dangling=true | xargs --no-run-if-empty docker volume rm

使用 cron 运行。就我而言,每小时

enter image description here


1
投票

您有 10 个正在运行的容器,并且 2 年前的映像强烈表明您可能正在更改这些容器内的文件系统(写入日志、临时文件,甚至可能安装应用程序)。修剪不会删除这些容器、它们的映像、这些容器内的文件系统更改或容器的日志。您将在

overlay2
中看到的部分是文件系统更改,因此请使用以下命令查看每个容器中创建/更改了哪些文件:

docker container diff ${container_name_or_id}

例如:

$ docker container diff d7c
C /run
A /run/user
A /run/user/1000
C /tmp
A /tmp/.X11-unix
C /home
A /home/user

您的列表可能会更长,您可以进入容器删除您不再需要的任何创建的文件(使用

docker exec
假设容器有 shell 和其他 CLI 工具)。

有关清理大型 Overlay2 目录的更多信息,请参阅 清理 docker/overlay2 是否安全


0
投票
  1. 检查 docker volume ls ,它将显示卷和大小
  2. 无论不需要什么,清除它们
  3. 如果您使用基于 Linux 的映像,您可以使用 - apt-get autoremove 来删除孤立包

0
投票

我也有过同样的经历,但似乎

docker prune --all
并没有(总是?根本?)按预期工作。

对我有什么帮助:

开始之前检查当前使用情况

   docker system df
  1. 删除所有超过 35 天的容器(根据您的喜好调整)

    docker container prune --filter "until=840h" --force
    
  2. 删除未使用的卷

    docker volume prune --force
    
  3. 删除悬空卷(

    docker system prune
    实际上应该解决这个问题,但通常不会)

    docker volume rm $(docker volume ls -q --filter dangling=true)
    
  4. 最后,删除所有超过48小时的缓存文件

    docker builder prune --all --filter until=48h --force
    

再次检查查看结果

docker system df
© www.soinside.com 2019 - 2024. All rights reserved.