为什么私有docker注册表中只有4个标签就有很多blob?

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

我有一个私有的 docker 注册表,垃圾收集不会清除任何空间。我的图像只有 4 个标签,但运行

garbage-collection --dry-run
会发现一堆清单和斑点。 标签输出:

1   "0.0.18"
4   "0.0.16"
5   "0.0.19-SNAPSHOT"
6   "0.0.17"

垃圾收集输出:

first-image
first-image: marking manifest sha256:0097c9845b15c656fce4641342e2b326e876552e3ef62d2d00c60c3e60cdc1a5 
first-image: marking blob sha256:a3d9a3da71d2604e1ea5b79aaeaaf11b3fc8bbd433cbb145df13342f4691fc88
first-image: marking blob sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f
first-image: marking blob sha256:aa5b63dfa01646dce4380e03beced61802400b00a00eb6c41a45612e6fb57e96
first-image: marking manifest sha256:00d35e06b03f5c1858f0f961de3d5f8a47af57b16c0a3d122ba3b8bd9da69b06 
first-image: marking blob sha256:fbcf20091271855e22afcb35257403b112695870570278e151e5ece7f7c5fbef
first-image: marking blob sha256:9d19ee268e0d7bcf6716e6658ee1b0384a71d6f2f9aa1ae2085610cf7c7b316f
first-image: marking blob sha256:a25c902218f996c9c79ecf60c1687d9aba1fd6f0d239f4f195608e32b37c1451
first-image: marking manifest sha256:018ee5663046259e60e944aab1f5cb71691a4a5107d2173ee1d9f9c9ac18b86c 
first-image: marking blob sha256:a838860453789b1dcc933ad94e68cafed60abbb1ca321f73ed247160f4e06b89
first-image: marking blob sha256:8789581436c067f1467941de4a460158912c663650f915502c8009d595296b61
first-image: marking blob sha256:449540e442f7d79059742f178ec0c330e00a7c42559cb4549d9b191f1ca28114
first-image: marking manifest sha256:02691ae1100a76e28290ea3baea3665bdb0f8a1b1403a866f695927a105c0061 
first-image: marking blob sha256:50d4a96b5c596bda8d4b576897c5b923f3c7630ef212e6fd893f770c425e9c4a
first-image: marking blob sha256:74ac377868f863e123f24c409f79709f7563fa464557c36a09cf6f85c8b92b7f
first-image: marking blob sha256:a182a611d05b01879f065473c49fb968b8d30312f931350ea07af1c46aa8b4f9
first-image: marking manifest sha256:02a459655d04652cbd8e5a835c7454ebf1c1021008ce0cca759e41a322ea212c 
first-image: marking blob sha256:5c80b83719b8f1fa746a084a3adf4eb89d989aac781db8e0472423b9988a809d
first-image: marking blob sha256:6e3729cf69e0ce2de9e779575a1fec8b7fb5efdfa822829290ab6d5d1bc3e797
first-image: marking blob sha256:4d8d923227d8dc300e1ddab1b65c83c0eff7f4a7105d958420872f7138b79735
first-image: marking manifest sha256:031403af9527033e9e01e732c15fa103a04528220b7be2cfa283d634f1905a34 
first-image: marking blob sha256:e37b7ebb7514f8fc8e31a4646652b40c0879d0bc37dcfc946655f3785b64b466
first-image: marking blob sha256:1bc677758ad7fa4503417ae5be18809c5a8679b5b36fcd1464d5a8e41cb13305
first-image: marking blob sha256:0d0e0ecb256ae3e8b7625494ed35189f845766552b7159a17f634706e28a9687
.
.
.
.

30151 blobs marked, 0 blobs and 0 manifests eligible for deletion

列表已省略,大约有 70 个清单条目。旧的 SNAPSHOT 标签已被删除,但清单似乎仍然存在。

我有第二张图像,其中所有标签都被删除,但垃圾收集还找到清单和 blob,但它们都不符合删除条件。

为什么只有 4 个标签就有这么多清单?

docker-registry
1个回答
0
投票

分发项目中的

garbage-collection
命令会清除没有引用它们的清单的 Blob。清单可以在没有标签的情况下存在,因此如果相同的标签被多次替换,可能会出现很多旧的清单。

至于只有 4 个标签的情况下应该存在多少个 blob,没有更多细节我们无法确定。每个标签可能指向一个 OCI 索引/Docker 清单列表,然后指向一个清单数组,每个清单都包含一个层 blob 列表及其配置 blob。根据平台数量和层数,您将获得不同的 blob 计数。

您可以指示

garbage-collect
删除未标记的清单,但这会带来一个很大的警告。 该删除包括多平台清单的每个未标记的子清单。进行清理的结果是顶级标签仍然解析,但所有平台特定的图像内容都从其下面删除。

如果只有 4 个标签,我会进行备份,或者使用 Crane、skopeo 或 regctl 等工具将图像拉到本地磁盘。然后你可以尝试潜在的破坏性

garbage-collect --delete-untagged

© www.soinside.com 2019 - 2024. All rights reserved.