最近开始使用Docker注册表作为公司码头映像的中心。几周后,我发现码头注册中心吃掉了所有的磁盘空间:
我们为开发人员提供了一个自动部署,每次从GIT中提取最新的主程序,然后创建docker映像并将其推送到我们的注册表。图像名称和图像标记总是相同的。因此,我预计旧的图像会被新的图像覆盖,但实际上所有这些层都是在.../docker/registry/v2/blobs/sha256/文件夹中收集的。
内置的垃圾收集器没有帮助:/usr/bin/docker注册表/bin/注册表垃圾收集它不会删除未使用的层并生成smth.like:标记为1204的blobs,符合删除条件的0 blobs。
我们只有一个码头形象。但它经常被推到注册中心。如何只保留图像的最新版本?
注册表版本为2.4.0
发布于 2017-07-12 03:08:26
若要强制垃圾收集器删除未标记的图像,必须删除一些清单文件。从DockerRegistry2.4.0开始,我就已经在生产中使用了一个脚本,并且仍然可以使用2.6.1:
编辑:我用Python重写了它,并创建了一个Docker映像:注册表
发布于 2019-09-18 09:45:32
由于DockerRegistry2.7.0(截止209-09-18年为2.7.1),有一个标志--delete-untagged删除那些未引用的blobs
docker exec -it -u root registry bin/registry garbage-collect --delete-untagged /etc/docker/registry/config.yml
不过,它并不能消除空目录。所有空的blob和存储库目录仍将保留。
我在文档中也没有发现任何提到该标志的地方,我在一个GitHub线程中找到了它。
根据源代码的说法,短格式是-m。
GCCmd.Flags().BoolVarP(&removeUntagged, "delete-untagged", "m", false, "delete manifests that are not currently referenced via tag")
以下是拉请求:https://github.com/docker/distribution/pull/2302
编辑:-m (--delete-untagged)选项仍然是多拱清单:https://github.com/distribution/distribution/issues/3178的buggy。
https://stackoverflow.com/questions/45046752
复制相似问题