如何获得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发行版中使用searchfunction ( https://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的图像的一种方法。