如何在Docker中从Private 1.0注册表中搜索图像?[关闭]


76

我做了一个私人注册表,curl xx.xx.xx.xx:5000还可以。我通过执行以下操作将映像推送到docker私有注册表中: docker push xx.xx.xx.xx:5000/centos
返回:
http://xx.xx.xx.xx:5000/v1/repositories/centos/tags/latest

问题是如何从注册表网站或命令中获取所有图像。我无法从Docker Registry API找到任何信息。有人帮忙吗?:)


我的意思是如何通过命令行或http从私人注册表中搜索图像
edwardsbean 2014年

Answers:


71

从私有注册表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"}]}

提供更多背景信息,这是我启动注册表的方式:

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

因此,对于search
Larry Cai

5
看到这个问题的参考github.com/docker/docker-registry/issues/63 curl -X GET http://localhost:5000/v1/search可以列出所有图像
Larry Cai

12
从api v2开始,它是使用http://localhost:5000/v2/_catalog docs.docker.com/registry/spec/api
mimo

88

现在,从Docker客户端,您可以直接直接搜索您的私有注册表,而无需使用HTTP API或任何其他工具:

例如搜索centos图像:

docker search localhost:5000/centos


作为记录,这对我使用Docker版本1.3.1,build 4e9bbfa
Marcello

4
绝对应该在cli帮助页面上提到它!docs.docker.com/reference/commandline/cli/#search
Marcello Romani

1
@MarcelloRomani我认为这是正确的链接:docs.docker.com/engine/reference/commandline/search
Hexaholic

71

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

列表存储库(链接

GET /v2/_catalog

列出图像标签(链接

GET /v2/<name>/tags/list

基于此,以下内容对我在本地注册表上起作用(注册表:2 IMAGE ID 1e847b14150e365a95d76a9cc6b71cd67ca89905e3a0400fa44381ecf00890e1创建于2015-08-25T07:55:17.072):

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

17

当前没有对Docker Registry v2的搜索支持

关于这个话题有一个长期的话题。当前的计划是支持以扩展名结尾的搜索,该扩展应在v2.1之前准备好

作为一种变通方法,执行您的注册表V2正在运行的机器上执行以下操作:

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

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


如果docker exec -it <your_registry_container_id> bash命令不起作用,请尝试docker exec -it <your_registry_container_id> / bin / sh
KurioZ7

13

只需搜索“库”,就可以在我的私有注册表中获取所有内容:

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

退货(例如):

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

31
在Ubuntu 14.04上使用docker 1.8.1时Error response from daemon: Unexpected status code 404,出现了什么问题?
carloreggiani 2015年

4
我有同样的问题,命令'docker search repositroy_ip:5000 / busybox'返回404,但先前的命令'docker push repository_ip:5000 / busybox'成功
ksopyla

您可能需要对不安全的注册使用curl,例如curl --insecure -u "test:password" https://myregistrydomain.com:5000/v2/_catalog
Leon Mak

“如果您在不启用搜索的情况下启动docker-registry,那么该用户界面将无法正常工作,原因也不明显。我能够很好地添加注册表,因为docker-registry-host:5000 / v1 / ping返回HTTP 200,但是在导航至图片时,UI会报告“注册表无法访问”,b / c docker-registry-host:5000 / v1 / search返回HTTP 404。 github.com/atcol/docker-registry-ui/issues/...
sm4rk0

7

列出所有图片

docker search <registry_host>:<registry_port>/

列出类似“ vcs”的图像

docker search <registry_host>:<registry_port>/vcs


2

当前AFAIK没有简单的方法可以执行此操作,因为此信息应按私有注册表没有的索引存储。但是根据您启动注册表的方式,您有两种选择:

  1. 如果您在不使用-v的情况下启动注册表以将数据存储在单独的主机文件夹中,则可以尝试docker diff <id_of_registry_container>使用该命令,您应该获取有关容器fs更改的信息。所有推送的图像应位于/ tmp / registry / repositories /
  2. 如果您使用-v启动注册表,只需检查主机上已安装目录的内容

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


抱歉,我的意思是如何通过命令行或http从私人注册表中搜索图像
edwardsbean 2014年

是的,我知道,但是没有索引的AFAIK不能在私有注册表中搜索图像。/v1/search注册表中有api方法,但它需要索引后端。私有注册表代码(github.com/dotcloud/docker-registry/blob/master/docker_registry/…)中有基本的索引实现,但仅在独立模式下提供基本功能。几天前,我发现了这个问题:github.com/ekristen/docker-index但没有时间进行测试。
odk 2014年

1

修改@mre的答案以仅从一个命令获取列表(至少对Docker Registry v2有效)。

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

也用于列出存储库的标签:docker exec -it <您的注册表/容器/ id> ls -a / var / lib / registry / docker / registry / v2 / repositories / postgresql / _manifests / tags
Mohsen Abasi

0

一行中的另一种方法(如果需要,请替换您的实际路径/端口)。

示例:假设通用注册表:2.0启动,正在运行的注册表容器具有一个日志文件,其中包含图像和标记名。我这样推断数据:

grep -r -o "vars\.name=.* vars.reference=.*" /var/lib/docker/containers/* | cut -c 167-225 | sed 's/ver.*$//' | sed 's/vars\.name=//' | sed 's/ vars\.reference=/:/' | sort -u

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.