Docker注册表2.0 API v2

问题描述 投票:21回答:9

我拉了并设置了本地docker注册表:2.0

我已经尝试成功推送图像,但是当我尝试搜索图像时,我得到404:

root@ip-10-232-0-153:~# curl -v -X GET http://localhost:5000/v2/search
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET /v2/search HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:5000
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Content-Type: text/plain; charset=utf-8
< Docker-Distribution-Api-Version: registry/2.0
< Date: Fri, 08 May 2015 00:00:45 GMT
< Content-Length: 19
<
404 page not found
* Connection #0 to host localhost left intact

此外,当我尝试卷曲localhost:5000时,我只得到404:

404 page not found
search curl docker http-status-code-404 docker-registry
9个回答
32
投票

更新(2016年4月14日):仍然没有在distribution roadmap,但这里是一个particular issue about search

更新(2015年11月12日):API端点尚不存在,尚未出现在Docker Registry路线图中。

这里的问题是new v2 Docker registry不支持那个特定的端点,因为这个问题和答案。您可以检查the source itself的路由端点,您会发现大多数API端点都涉及上传和标记等简单操作,但尚未实现搜索端点。这里需要注意的是,v2注册表是一个与v1注册表完全不同的项目。它甚至用完全不同的语言编写(v1是一个Python项目,而v2使用Go,这更符合其余的Docker项目)。我花了一些时间和认真阅读才能理解注册管理机构之间的二分法。值得一看at this particular Github issue about the v2 registry,深入探讨最近关于v2注册表状态的讨论,以及他们一直在讨论的问题。

所以v2注册表中还没有搜索端点。您可以按任务编号8 in this documentation中提到的标签或图像名称本身列出您的图像。


3
投票

如果你在Windows上,这是一个Powershell脚本,可以从具有基本http auth的windows查询v2/_catalog

https://gist.github.com/so0k/b59382ea7fd959cf7040

仅供参考,使用这个你必须docker pull distribution/registry:master而不是docker pull registry:2registry:2图像版本目前是2.0.1,它没有目录端点。


1
投票

我想检查码头图像是否存在的最简单方法是使用Docker V2 REST API Tags list service

例:-

curl $CURLOPTS -H "Authorization: Bearer $token" "https://hub.docker.com:4443/v2/your-repo-name/tags/list"

如果上面的结果返回20000k带有图像标签列表,那么我们就知道图像存在

{"name":"your-repo-name","tags":["1.0.0.1533677221","1.0.0.1533740305","1.0.0.1535659921","1.0.0.1535665433","latest"]}

否则,如果你看到类似的东西

{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"your-repo-name"}}]} 

那么你肯定知道图像不存在。


0
投票

在Linux(Centos 7)上,只要注册表图像是唯一运行的容器,我就会使用它:这将列出推送到resistry /容器的所有图像。我把它放在一个脚本中并调整剪切的参数来获得我想要的东西,因为图像名称的长度确实有所不同。以sudo“script-name.sh”运行

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

0
投票

今天我尝试了registry:master图像,但不存在。

xotl@xotl-VM:~$ docker run registry:master
Unable to find image 'registry:master' locally
Pulling repository docker.io/library/registry
Tag master not found in repository docker.io/library/registry
xotl@xotl-VM:~$ 

现在你可以运行registry:2并拥有端点。

如果我在我的机器上访问http://localhost:5000/v2/_catalog我可以看到这个输出{"repositories":["ubuntu"]},这是正确的。还尝试了http://localhost:5000/v2/ubuntu/tags/list并得到了这个回应{"name":"ubuntu","tags":["latest"]},所以它的工作原理。

你可以采取a look at the docs


0
投票
@Xotl
curl -X GET registry.com:5000/v2/lashou/centos/tags/list
{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"lashou/centos"}}]}

0
投票

在撰写本文时,不支持Docker注册表搜索功能v2。请参阅2015年2月以来的讨论:https://github.com/docker/distribution/issues/206

注册表V2就像将图像放入黑色包中一样,希望您记住您放入的内容以及您对图像的命名。甚至不要考虑删除图像。我不想用V1翻录和替换V2;即使V1工作,并有几个工具与V1一起使用,包括搜索和删除。我从营销开始使用注册表V2;更好的安全性和性能。

Ubuntu 14.04.3 LTS,CoreOS 723.3.0注册表github.com/docker/distribution v2.1.1

我编写了一个名为view-private-registry的脚本来搜索注册表V2 REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY。它适用于安装了REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY的任何系统。让我知道你会做出的任何改变,谢谢。

剧本:https://github.com/BradleyA/Search-docker-registry-v2-script.1.0

#!/bin/bash
# %W% %G% %U%
#
#       View private registry,
#               if REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY is mounted on your system
#
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY="/mnt/three/docker-registry/registry-data"
#
find $REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY -print | \
    grep 'v2/repositories' | \
    grep 'current' | \
    grep -v 'link' | \
    sed -e 's/\/_manifests\/tags\//:/' | \
    sed -e 's/\/current//' | \
    sed -e 's/^.*repositories\//    /' | \
    sort > /tmp/a1
cat /tmp/a1
wc -l /tmp/a1 > /tmp/a2
echo "Number of images: `cat /tmp/a2 | awk {'print $1'}`"
echo "Disk space used:  `du -hs $REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY`"
rm /tmp/a1 /tmp/a2`

输出:

`$ ./view-private-registry`
busybox:latest
gcr.io/google_containers/etcd:2.0.9
gcr.io/google_containers/hyperkube:v0.21.2
gcr.io/google_containers/pause:0.8.0
google/cadvisor:latest
jenkins:latest
logstash:latest
mongo:latest
nginx:latest
python:2.7
redis:latest
registry:2.1.1
stackengine/controller:latest
tomcat:7
tomcat:latest
ubuntu:14.04.2
Number of images:   16
Disk space used:    1.7G    /mnt/three/docker-registry/registry-data

-1
投票

https://github.com/docker/distribution提供的最新版本的Docker Registry支持Catalog API。 (V2 / _catalog)。这允许搜索功能。

如果有兴趣,您可以尝试使用我建立的docker image注册表CLI,以便在新的Docker Registry v2发行版中使用搜索功能:(https://github.com/vivekjuneja/docker_registry_cli


-1
投票

正确。

它只是一个实现的示例,用于获取一些图像列表。是的,假设这是一个通用的registry2.0启动。例如$ sudo docker run --name = myregistry -d -p port:port myregistry:1.0。

基本上,重点是每个容器都有一个日志文件... some-path / containers ... ID-json.log。在该文件中存储有关推送到正在运行的注册表的图像的信息。所以它可以用来推断图像列表。虽然它是原始的,但总比没有好。不是更大的搜索/目录问题的解决方案,而是获取图像列表的方法。这是一个非常自定义的解决方法,可以在等待“官方”修复时解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.