当前位置: 首页 > 知识库问答 >
问题:

Docker: Overlay2大小太大

杜俊风
2023-03-14

我用两个容器运行docker的环境。我注意到Overly2文件夹太大了。当docker关闭(docker compose down)时,Overly2文件夹的大小为2.3GB。当容器运行时,Overly2文件夹将增加到4.0GB,并且随着时间的推移而增加。这正常吗?

命令du-shc/var/lib/docker/*停止容器:

76K     /var/lib/docker/buildkit
268K    /var/lib/docker/containers
3.7M    /var/lib/docker/image
64K     /var/lib/docker/network
2.3G    /var/lib/docker/overlay2
0       /var/lib/docker/plugins
0       /var/lib/docker/runtimes
0       /var/lib/docker/swarm
0       /var/lib/docker/tmp
0       /var/lib/docker/tmp-old
0       /var/lib/docker/trust
236M    /var/lib/docker/volumes
2.5G    total

命令du-shc/var/lib/docker/*,容器运行:

76K     /var/lib/docker/buildkit
448K    /var/lib/docker/containers
4.9M    /var/lib/docker/image
64K     /var/lib/docker/network
4.0G    /var/lib/docker/overlay2
0       /var/lib/docker/plugins
0       /var/lib/docker/runtimes
0       /var/lib/docker/swarm
0       /var/lib/docker/tmp
0       /var/lib/docker/tmp-old
0       /var/lib/docker/trust
235M    /var/lib/docker/volumes
4.3G    total

编辑

命令docker system df

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          4         3         1.472GB   750.4MB (50%)
Containers      13        2         106.9MB   89.31MB (83%)
Local Volumes   62        1         1.884GB   1.817GB (96%)
Build Cache     0         0         0B        0B

共有3个答案

唐沈义
2023-03-14

这是初学者docker用户的疑问。如果你有这个问题,我建议你回答。这对我来说是工作,所以我希望能帮助你。

首先,运行命令行docker system df。它显示有关docker守护进程使用的磁盘空间量的信息。你可以在这里看到。

这就是一个例子。您有5个映像、2个活动卷和本地卷,其中一个处于非活动状态。所以你可以回收一个空闲的空间。对于每种类型,您都可以回收一个可用空间。

  1. 图像:您可以使用命令行docker image rmi删除未使用的图像

完成所有这些步骤后,您可以检查覆盖层2。如果没问题:du-shc/var/lib/docker/*

垃圾收集在所有技术中都是一个错误。你认为这是一种工作方式,但实际上是另一种方式。你可以在这里了解更多。

注意:注意使用docker系统修剪。在这里了解更多信息。

曾航
2023-03-14

这表示容器的读写层有文件被容器内运行的应用程序写入。您可以看到正在创建/修改的文件:

docker container diff ${container_name_or_id}

用于特定容器。如果你的应用程序正在向容器写入日志,我建议你不要这样做(最佳做法是向stdout写入日志,然后使用这个答案限制日志的大小)。

如果应用程序更改了某个文件的权限或所有权,或者对其他大文件进行了小的更改,则会触发整个文件的写时复制,这会快速增加磁盘上的大小。

通常,您应该避免修改映像中的文件。它们应该是静态的,这样您就可以希望将整个容器文件系统更改为只读。配置将从外部注入(带有卷挂载或环境变量),数据将存储在卷或外部数据库中。

屈宏爽
2023-03-14

/usr/var/docker用于存储图像,overlay2包含各种文件系统层,使用docker系统prune

 类似资料:
  • 我使用JXLS创建我的WoorkBook。JXLS在下面使用POI。要创建工作簿,JXLS要么需要文件,要么需要输入流。 使用file对象,我得到了我想要的Woorkbook。但是,与流我得到的错误ZIP条目大小太大。 你有什么建议吗?

  • 问题内容: 我知道这个问题已经被问过很多次了,但是似乎没有一个是我所看到的相同的问题。 给我带来问题的表只有两列:第一个字段是整数,第二个字段是longtext。这是来自MySQL 5.5.30的转储文件的一部分: 如您所见,此转储文件来自MySQL 5.5.30,我可以将此数据导入5.5.30。但是,当我尝试导入5.6.x时,出现 错误1118(42000)行大小太大的 错误。 进入large_

  • 我正在尝试构建一个安装了plv8扩展的PostgreSql 9.6 docker映像。下面是我的Dockerfile。 生成的图像大小为3.45 GB,而Docker hub的原始图像大小为235 MB。你知道为什么产生的图像尺寸这么大吗?如何缩小其尺寸?我试图使用此链接减小其大小,但不幸的是,docker导入/导出丢失了元数据。 更新: 我试图将所有RUN语句合并为一个语句。 新的大小是3.11

  • 我使用Infinispan缓存来存储值。代码每10分钟写入一次缓存,缓存大小约为400mb。它的生存时间约为2小时,最大条目数为1600万条,尽管目前在我的测试中,条目数没有超过200万条左右(我可以通过检查jconsole中的MBean/指标来了解这一点)。 当我启动jboss时,java堆大小是1.5Gb到2Gb。为jboss分配的最大内存的-Xmx设置是4Gb。 当我禁用Infinispan

  • 问题内容: 嗨,我很难理解为什么这不起作用 莫尔斯电码只是一串数字。问题是它说Integer number太大:4545454545,但是我确定Long可以更长。 问题答案: 您需要使用或将其限定为。默认情况下,是文字,超出的范围。 建议使用大写字母以避免混淆,因为和看起来很相似 你可以做 : 要么 根据JLS 3.10.1 : 如果整数文字 以ASCII字母L或l(ell) 为后缀,则其类型为l