我正在使用docker注册表v1,并且我对迁移到新版本v2很感兴趣。但是我需要一些方法来获取注册表中存在的图像列表;例如,使用注册表v1,我可以对http://myregistry:5000/v1/search?
执行get请求,结果是:
{
"num_results": 2,
"query": "",
"results": [
{
"description": "",
"name": "deis/router"
},
{
"description": "",
"name": "deis/database"
}
]
}
但我在official documentation上找不到类似的东西来获取注册表中的图像列表。有谁知道在新版本的v2上做这件事的方法?
发布于 2015-08-01 00:04:42
对于注册表V2的最新版本(截至2015-07-31),您可以从DockerHub获得this image:
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"]}
如果注册表需要身份验证,则必须在curl
命令中指定用户名和密码
curl -X GET -u <user>:<pass> https://myregistry:5000/v2/_catalog
curl -X GET -u <user>:<pass> https://myregistry:5000/v2/ubuntu/tags/list
发布于 2016-01-25 23:53:28
这让我抓狂,但我终于把所有的东西都拼凑在一起了。截至2015年1月25日,我已经确认可以在docker V2注册表中列出图像(与上面提到的@jonatan完全相同。)
如果我有这方面的代表,我会支持这个答案。
相反,我将对答案进行扩展。由于注册中心https在设计时考虑到了安全性,因此我认为应该包括how to set it up with a self signed cert和run the container with that cert,以便可以使用证书对其进行https调用:
这是我实际用来启动注册表的脚本:
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
(如上所述)必须与指定给生成的证书的域匹配。
发布于 2016-03-03 16:49:15
为此,我们编写了一个命令行界面工具:docker-ls,它允许您浏览docker注册表,并支持通过令牌或基本身份验证进行身份验证。
https://stackoverflow.com/questions/31251356
复制相似问题