最近开始使用Docker注册表作为企业docker镜像的中心.几周之后,我发现docker注册表已经占用了所有磁盘空间:(
我们为开发人员自动部署,每次都从GIT中获取最新的master,然后创建docker镜像并将其推送到我们的注册表.图像名称和图像标记始终相同.所以我期望旧图像被docker注册表中的新图像覆盖,但实际上所有这些图层都是在.../docker/registry/v2/blobs/sha256 /文件夹中收集的.
内置垃圾收集器没有帮助:/ usr/bin/docker exec registry/bin/registry garbage-collect /etc/docker/registry/config.yml.它只是不删除未使用的层并产生smth.like:1204 blob标记,0 blob符合删除条件
我们只有1个泊坞窗图像.但它经常被推到注册表中.如何只保留最新版本的图像?
注册表版本是2.4.0
Dan*_*l F 12
由于 Docker Registry 2.7.0(截至 2019 年 9 月 18 日为 2.7.1),有一个标志--delete-untagged可以删除那些未引用的 blob
docker exec -it -u root registry bin/registry garbage-collect --delete-untagged /etc/docker/registry/config.yml
但是,它并没有摆脱空目录。所有空的 blob 和存储库目录仍将保留。
我在 Docker Registry 文档中也找不到任何提及该标志的内容,我在 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
要强制垃圾收集器删除未标记的图像,必须删除某些清单文件。我有一个自Docker Registry 2.4.0以来一直在生产中使用的脚本,但仍适用于2.6.1:
https://github.com/ricardobranco777/clean_registry.sh
编辑:我用Python重写了它并创建了一个Docker镜像:https : //github.com/ricardobranco777/clean_registry
| 归档时间: |
|
| 查看次数: |
4622 次 |
| 最近记录: |