如何在Docker中从私有1.0registry中search图像?

我做了一个私人registry,curlxx.xx.xx.xx:5000是好的。 我通过执行一个图像到docker私人registry中: docker push xx.xx.xx.xx:5000/centos
它返回:
http://xx.xx.xx.xx:5000/v1/repositories/centos/tags/latest

问题是如何从registryweb或命令获取所有图像。 我无法从dockerregistryAPIfind任何信息。 任何一个帮助? 🙂

从私有registry的v 0.7.0开始,您可以执行以下操作:

 $ curl -X GET http://localhost:5000/v1/search?q=postgresql 

你会得到一个JSON有效载荷:

 {"num_results": 1, "query": "postgresql", "results": [{"description": "", "name": "library/postgresql"}]} 

给更多的背景这里是我如何开始我的registry:

 docker run \ -e SETTINGS_FLAVOR=local \ -e STORAGE_PATH=/registry \ -e SEARCH_BACKEND=sqlalchemy \ -e LOGLEVEL=DEBUG \ -p 5000:5000 \ registry 

现在从docker客户端,您可以直接search您的私人registry,而不使用HTTP API或任何额外的工具:

例如searchcentos图像:

docker search localhost:5000/centos

所以我知道这是一个快速变化的领域,但(截至2015年9月8日)我在Docker Registry HTTP API V2中发现了以下内容:

清单存储库( 链接 )

 GET /v2/_catalog 

列表图片标签( 链接 )

 GET /v2/<name>/tags/list 

基于以下原因,本地注册pipe理机构(注册pipe理机构:2015-08-25T07:55:17.072创build了2 IMAGE ID 1e847b14150e365a95d76a9cc6b71cd67ca89905e3a0400fa44381ecf00890e1):

 $ curl -X GET http://localhost:5000/v2/_catalog {"repositories":["ubuntu"]} $ curl -X GET http://localhost:5000/v2/ubuntu/tags/list {"name":"ubuntu","tags":["latest"]} 

目前,Docker Registry v2没有search支持

这个话题有一个长期的话题 。 目前的计划是最终支持search扩展 ,这应该在v2.1中准备就绪 。

作为解决方法 ,请在运行registryv2的计算机上执行以下操作:

 > docker exec -it <your_registry_container_id> bash > ls /var/lib/registry/docker/registry/v2/repositories/ 

这些图像位于与其名称空间相对应的子目录中,例如jwilder/nginx-proxy

能够通过search“库”来获取私人registry中的所有内容:

 docker search [my.registry.host]:[port]/library 

退货(例如):

 NAME DESCRIPTION STARS OFFICIAL AUTOMATED library/custom-image 0 library/another-image 0 library/hello-world 0 

我安装了atc- / docker-registry-web项目,为我提供UI和search我的私人registry。 https://github.com/atc-/docker-registry-web

它是dockerised,你可以运行它

docker运行-p 8080:8080 -e REG1 = http://registry_host.name:5000 / v1 / atcol / docker-registry-ui

并通过浏览到registry_ui_host.name:8080来查看内容

目前AFAIK没有简单的方法来做到这一点,因为这些信息应该被私人registry没有的索引存储。 但取决于你如何开始registry你有2个选项:

  1. 如果你开始注册时没有使用-v将数据存储在单独的主机文件夹中,那么你可以使用docker diff <id_of_registry_container>来尝试使用这个文件,你应该得到关于容器fs更改的信息。 所有推送的图像应该在/ tmp / registry / repositories /
  2. 如果您使用-v开始注册,只需检查主机上安装的目录的内容

如果你使用“centos”作为名字,它应该在/ tmp / registry / repositories / library / centos中。 该文件夹将包含描述图像结构的文本文件。 实际数据在/ tmp / registry / images /中。

列出所有图像

 docker search <registry_host>:<registry_port>/ 

列出像'VCS'

 docker search <registry_host>:<registry_port>/vcs 

另一种方法一行(如果需要replace你的实际path/端口)。 示例:假设一个通用registry:2.0启动正在运行的registry容器有一个保存图像和标签名称的日志文件。 我推断这样的数据:

grep -r -o“vars.name =。* vars.reference =。 ”/ var / lib / docker / containers / | 切割-c 167-225 | sed's / ver。* $ //'| sed's / vars.name = //'| sed's / vars.reference = /:/'| sorting-u

您可能需要调整切割值以获得所需的输出。