如何在 docker 中从私有 1.0 注册表中搜索图像? [关闭]

Posted

技术标签:

【中文标题】如何在 docker 中从私有 1.0 注册表中搜索图像? [关闭]【英文标题】:How to search images from private 1.0 registry in docker? [closed] 【发布时间】:2014-07-07 04:09:26 【问题描述】:

我做了一个私有注册表,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 中找到任何信息。 有人帮忙吗? :)

【问题讨论】:

我的意思是如何通过命令行或http从私有注册表中搜索图像 【参考方案1】:

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

示例:假设一个通用注册表: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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

也用于列出存储库的标签:docker exec -it ls -a /var/lib/registry/docker/registry/v2/repositories/postgresql/_manifests/tags【参考方案3】:

列出所有图片

docker search <registry_host>:<registry_port>/

列出像“vcs”这样的图像

docker search <registry_host>:<registry_port>/vcs

【讨论】:

【参考方案4】:

目前不支持 Docker Registry v2 的搜索。

有一个long-running thread on the topic。目前的计划是支持以extension结尾的搜索,应该是ready by v2.1。

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

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

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

【讨论】:

如果 docker exec -it bash 命令不起作用,请尝试 docker exec -it /bin/sh【参考方案5】:

所以我知道这是一个瞬息万变的领域,但(截至 2015 年 9 月 8 日)我在 Docker Registry HTTP API V2 中找到了以下内容:

列出存储库 (link)

GET /v2/_catalog

列出图片标签 (link)

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"]

【讨论】:

【参考方案6】:

能够通过仅搜索“库”来取回我的私人注册表中的所有内容:

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

返回(例如):

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

【讨论】:

在 Ubuntu 14.04 上使用 docker 1.8.1 我收到 Error response from daemon: Unexpected status code 404,怎么了? 我有同样的问题命令 'docker search repositroy_ip:5000/busybox' 返回 404,但是之前的命令 'docker push repository_ip:5000/busybox' 已经成功了 您可能需要对不安全的注册表使用 curl,例如curl --insecure -u "test:password" https://myregistrydomain.com:5000/v2/_catalog "如果您在未启用搜索的情况下启动 docker-registry,那么此 UI 将无法工作,原因也不清楚。我能够很好地添加注册表,因为 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/…【参考方案7】:

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

例如搜索centos镜像:

docker search localhost:5000/centos

【讨论】:

作为记录,这对我使用 Docker 版本 1.3.1 有效,构建 4e9bbfa 这个应该在cli帮助页面上一定要提到! docs.docker.com/reference/commandline/cli/#search @MarcelloRomani 我认为这是正确的链接:docs.docker.com/engine/reference/commandline/search【参考方案8】:

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

它是 dockerised,你可以通过

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

浏览到registry_ui_host.name:8080查看内容

【讨论】:

【参考方案9】:

从私有 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"]

这里提供更多背景信息是我如何启动我的注册表:

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

【讨论】:

所以这是 search 的未记录功能 查看本期参考github.com/docker/docker-registry/issues/63curl -X GET http://localhost:5000/v1/search可以列出所有图片 从 api v2 开始使用 http://localhost:5000/v2/_catalog docs.docker.com/registry/spec/api【参考方案10】:

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

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

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

【讨论】:

对不起,我的意思是如何通过命令行或http从私有注册表中搜索图像 是的,我知道,但是没有索引的 AFAIK 无法在私有注册表中搜索图像。注册表中有/v1/search api 方法,但它需要索引后端。私有注册表代码(github.com/dotcloud/docker-registry/blob/master/docker_registry/…)中有基本的索引实现,但它只是在独立模式下提供基本功能。几天前我发现了这个:github.com/ekristen/docker-index 但没有时间测试。

以上是关于如何在 docker 中从私有 1.0 注册表中搜索图像? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何远程访问私有 docker-registry?

如何使用 docker-compose 下载私有图像(本地)

在 AWS 中设置私有 docker 注册表并将其与 Beanstalk 一起使用

如何使用气流 DockerOperator 提取我自己的私有存储库的 docker 映像?

Docker 私有注册表问题

在 nginx 代理后面使用 docker 私有注册表 (v2) 的 HTTP 响应格式错误