如何获得dockerregistryv2的图像列表

我正在使用dockerregistryv1,我有兴趣迁移到新版本v2。 但我需要一些方法来获取registry上的图像列表; 例如与registryv1我可以执行GET请求到http://myregistry:5000/v1/search? 结果是:

 { "num_results": 2, "query": "", "results": [ { "description": "", "name": "deis/router" }, { "description": "", "name": "deis/database" } ] } 

但我找不到官方文档类似的东西获取registry上的图像列表。 任何人都知道在新版本v2上做到这一点?

请参阅下面的 @ jonathan的答案,或者在这里的registryAPI文档: https : //docs.docker.com/registry/spec/api/

如果您search“列表”,您会看到在版本e中添加了支持。

对于最新的(2015-07-31)版本的Registry V2,您可以从DockerHub获取此图像 :

 docker pull distribution/registry:master 

列出所有的存储库(有效的图像):

 curl -X GET https://myregistry:5000/v2/_catalog > {"repositories":["redis","ubuntu"]} 

列出存储库的所有标签:

 curl -X GET https://myregistry:5000/v2/ubuntu/tags/list > {"name":"ubuntu","tags":["14.04"]} 

你可以search

http:// <ip/hostname><port> / v2 / _catalog

可从https://github.com/docker/distribution获得的最新版本的Docker Registry支持Catalog API。 (V2 / _catalog)。 这允许search储存库的能力

如果有兴趣的话,可以尝试我build立的docker image registry CLI,以便在新的Docker Registry发行版中使用searchfunctionhttps://github.com/vivekjuneja/docker_registry_cli

获取目录

默认情况下,registryAPI返回100条目录,有代码 :

当你curlregistryAPI:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

它等同于:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=100

这是一个分页美文。

当超过100的条目总和时,可以通过两种方式来完成:

首先 :给一个更大的数字

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=2000

Sencond :parsing下一个链接器url

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

响应头中包含的链接元素:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

回应标题:

Link: </v2/_catalog?last=pro-octopus-ws&n=100>; rel="next"

链接元素有这个请求的最后一个条目,那么你可以请求下一个“页面”:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?last=pro-octopus-ws

如果响应头包含链接元素,则可以在循环中完成

获取图像

当你得到目录的结果,如下所示:

{ "repositories": [ "busybox", "ceph/mds" ] }

你可以得到每个目录中的图像:

curl --cacert domain.crt https://your.registry:5000/v2/busybox/tags/list

收益:

{"name":"busybox","tags":["latest"]}

这一直使我疯狂,但我终于把所有的东西放在一起。 截至2015年1月25日,我已经确认可以在Docker V2registry中列出图像(正如上面提到的@jonatan)。

如果我有代表的话,我会投票回答。

相反,我会扩大答案。 由于registryV2是考虑到安全性,所以我认为包括如何使用自签名证书进行设置是合适的,然后使用该证书运行容器,以便可以使用该证书对其进行https调用:

这是我实际用来启动registry的脚本:

 sudo docker stop registry sudo docker rm -v registry sudo docker run -d \ -p 5001:5001 \ -p 5000:5000 \ --restart=always \ --name registry \ -v /data/registry:/var/lib/registry \ -v /root/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ -e REGISTRY_HTTP_DEBUG_ADDR=':5001' \ registry:2.2.1 

这对一些人来说可能是显而易见的,但是我总是把钥匙和证书弄混了。 上面提到的需要被引用来调用@jonaton的文件是上面列出的domain.crt。 (因为我把domain.crt放在/root ,我把它拷贝到了可以被访问的用户目录中。)

 curl --cacert ~/domain.crt https://myregistry:5000/v2/_catalog > {"repositories":["redis","ubuntu"]} 

**上面的命令已经改变了:-X GET实际上并没有工作,当我尝试它。

注意: https://myregistry:5000 (如上所述)必须匹配给生成的证书的域。

我们为此写了一个CLI工具: docker-ls它允许您浏览dockerregistry,并支持通过令牌或基本身份validation进行身份validation。

安装registry:2.1.1或更高版本(可以在这里查看最后一个),并使用GET / v2 / _catalog来获取列表。

https://github.com/docker/distribution/blob/master/docs/spec/api.md#listing-repositories

Lista的所有图像由Shell脚本示例: https : //gist.github.com/OndrejP/a2386d08e5308b0776c0

Dockersearchregistryv2function目前不支持在写这篇文章的时候。 查看自2015年2月以来的讨论:“build议registrysearchfunction#206” https://github.com/docker/distribution/issues/206

我写了一个脚本,你可以find: https : //github.com/BradleyA/Search-docker-registry-v2-script.1.0它不是很漂亮,但它从私人registry获得所需的信息。

我写了一个易于使用的命令行工具 ,以各种方式列出图像(如列出所有图像,列出这些图像的所有标签,列出这些标签的所有图层)。

它还允许您以各种方式删除未使用的图像,如仅删除单个图像的旧标签或从所有图像中删除等。从CI服务器填充registry并仅保留最新/稳定版本时,这很方便。

它是用python编写的,不需要你下载庞大的自定义registry图像。

由于每个registry都作为容器运行,因此容器ID具有关联的日志文件ID-json.log,该日志文件包含vars.name = [image]和vars.reference = [tag]。 一个脚本可以用来推断和打印这些。 这可能是列出推送到registryV2-2.0.1的图像的一种方法。