82

我做了一个私人注册表,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

问题是如何从注册表 Web 或命令中获取所有图像。我无法从 docker registry api 中找到任何信息。有人帮忙吗?:)

4

10 回答 10

91

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

例如搜索 centos 图像:

docker search localhost:5000/centos

于 2014-11-04T12:40:32.373 回答
79

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

列出存储库(链接

GET /v2/_catalog

列出图像标签(链接

GET /v2/<name>/tags/list

基于此,以下内容在本地注册表上为我工作(注册表:2 图像 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"]}
于 2015-09-08T13:39:28.073 回答
72

从私有注册表的 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
于 2014-06-17T19:51:28.517 回答
18

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

关于这个话题有一个长期运行的线程。目前的计划是最终支持带有扩展名的搜索,这应该在v2.1 之前准备好

作为一种解决方法,请在运行 registry v2 的机器上执行以下操作:

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

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

于 2015-06-30T12:15:54.783 回答
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
于 2015-03-03T21:40:14.343 回答
11

列出所有图像

docker search <registry_host>:<registry_port>/

列出像“vcs”这样的图像

docker search <registry_host>:<registry_port>/vcs
于 2016-03-22T20:15:43.720 回答
5

我安装了 atc-/docker-registry-web 项目,它为我提供 UI 并搜索我的私人注册表。 https://github.com/atc-/docker-registry-web

它是码头化的,你可以通过它来运行它

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

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

于 2014-09-17T12:45:28.717 回答
2

目前 AFAIK 没有简单的方法可以做到这一点,因为这些信息应该由私有注册表没有的索引存储。但根据您启动注册表的方式,您有 2 个选项:

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

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

于 2014-05-19T13:40:28.097 回答
1

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

docker exec -it <your_registry_container_id> ls -a /var/lib/registry/docker/registry/v2/repositories/
于 2018-11-21T10:08:08.263 回答
0

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

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

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

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

于 2015-08-05T15:30:07.253 回答