List 批量docker注册表清单删除:如何通过v2 REST api列出清单?

List 批量docker注册表清单删除:如何通过v2 REST api列出清单?,list,manifest,docker-registry,List,Manifest,Docker Registry,我想远程删除我的私有docker注册表(v2 api)中的特定或所有清单,以使gc能够收集图像数据。我找到了这个,但它只适用于标签。我决定延长它。我想列举清单。可以获取清单吗?我在这上面找不到有用的东西 我检查了这些,我也在网上搜索,但没有成功 --更新-- 当然,这两种方法都会导致404错误(我更喜欢使用wget)。为了 而且curl也给了我404 curl --header "Accept: application/vnd.docker.distribution.manifest.v

我想远程删除我的私有docker注册表(v2 api)中的特定或所有清单,以使gc能够收集图像数据。我找到了这个,但它只适用于标签。我决定延长它。我想列举清单。可以获取清单吗?我在这上面找不到有用的东西

我检查了这些,我也在网上搜索,但没有成功

--更新--

当然,这两种方法都会导致404错误(我更喜欢使用
wget
)。为了

而且
curl
也给了我404

curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -sI --user user:pass https://<registry-origin>/v2/wjs-wealth/manifests/gk-backend:latest
curl--header“Accept:application/vnd.docker.distribution.manifest.v2+json”-sI--user:passhttps:///v2/wjs-wealth/manifests/gk-backend:latest

我也有同样的问题。如果将一个docker映像(称为清单)推送到docker registry v2.0,并带有相同的标记,则新的清单将接受该标记,而旧的将不会被删除,而不是在没有分配标记的情况下存在

这些旧的清单不能在不知道其摘要的情况下从RESTAPI中列出,垃圾收集也不会删除它们

我发现获取docker注册表存储库清单的一种方法是通过垃圾收集工具。运行docker exec-it注册表垃圾回收——干运行/etc/docker/registry/config.yml。此命令将打印所有存储库的所有清单(,包括分配的标签)。例如:

hello-world
hello-world: marking manifest sha256:fea8895f450959fa676bcc1df0611ea93823a735a01205fd8622846041d0c7cf
hello-world: marking blob sha256:03f4658f8b782e12230c1783426bd3bacce651ce582a4ffb6fbbfa2079428ecb
hello-world: marking blob sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
hello-world: marking configuration sha256:690ed74de00f99a7d00a98a5ad855ac4febd66412be132438f9b8dbd300a937d
ubuntu

4 blobs marked, 0 blobs eligible for deletion
使用grep工具,只需过滤清单信息即可

然后可以调用deleterestapi来删除未使用的清单注意不要删除已分配标记的清单


删除REST API仅删除清单信息,blob中的图像数据将不会删除,因此再次运行垃圾收集命令,而不使用
--干运行
来删除未使用的blob:
docker exec-it registry registry garbage collection/etc/docker/registry/config.yml
您需要运行此命令来获取标记列表

 curl https://<registry>/v2/<repoName>/tags/list
curlhttps:///v2//tags/list
现在我们需要每个标记的清单-因为我们不想按照的答案删除它

curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -sI "https://<registry>/v2/<repoName>/manifests/<tag>" | grep "Docker-Content-Digest" | sed 's/Docker-Content-Digest: //;s/\r$//'      
curl-H“Accept:application/vnd.docker.distribution.manifest.v2+json”-sIhttps:///v2//manifests/| grep“Docker内容摘要”| sed的/Docker内容摘要:/;s/\r$/'
包含标题非常重要,否则会得到不同的Docker内容摘要

这将为您提供需要排除的清单列表


或者,您也可以使用此方法:

谢谢您的回答!这部分清理我已经调查过了。我唯一要做的就是远程自动删除清单,以使GC真正工作。作为CI的一部分。不幸的是,此url返回我
404未找到
。我使用了
wget
而不是
curl
wget--header=“Accept:application/vnd.docker.distribution.manifest.v2+json”--无检查证书--http user=user--http password=passwordhttps:///v2/wjs-wealth/manifests/integration-testing -O-
.wget可以工作,但是curl不能?我已经更新了我答案中的第二个url,因为原来的url可能会引起混乱。很抱歉,让评论混乱。请看问题,由于注释大小限制,我更新了它。我的意思是我的答案是肯定的,
integration-t‌​测试
令人困惑。起初我没有猜到这是图像标签。但无论如何,如果我使用正确的标签,我得到404找不到
 curl https://<registry>/v2/<repoName>/tags/list
curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -sI "https://<registry>/v2/<repoName>/manifests/<tag>" | grep "Docker-Content-Digest" | sed 's/Docker-Content-Digest: //;s/\r$//'