Dockerregistry2.0 API v2

我拉和设置本地dockerregistry:2.0

我试图成功地推送图像,但是当我尝试search图像时,我得到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 

另外当我尝试curl本地主机:5000,我只是得到一个404:

 404 page not found 

更新 (2016年4月14日):在发行路线图中仍然不在这里,但这是关于search的一个特殊问题 。

更新 (2015年11月12日):API端点仍然不存在,并且还没有在Docker Registry路线图中。

这里的问题是新的v2 Dockerregistry不支持那个特定的端点,因为这个问题和答案。 您可以检查路由端点的来源本身 ,您会发现大多数API端点都涉及简单的操作,如上传和标记,但没有实现search端点。 这里需要注意的是,v2registry是一个完全不同于v1registry的项目。 它甚至用完全不同的语言编写(v1是一个Python项目,而v2使用Go,这更符合Docker项目的其余部分)。 我花了一些时间和认真的阅读来理解注册pipe理机构之间的二分法。 值得关注的是,关于v2registry的这个特殊的Github问题深入探讨了v2registry的状态,以及一些关于它们在哪里进行的讨论。

所以在v2registry中还没有searchterminal。 您可以按照本文档中的任务编号8所述,通过标记或图像名称本身列出图像。

如果你在windows上,这里有一个Powershell脚本,用基本的httpauthentication从windows查询v2/_catalog

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

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

在Linux(Centos 7)上,只要registry映像是唯一运行的容器,就会使用它:这将列出所有推送到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 

今天我试了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"]} ,所以它的工作原理。

你可以看看文档 。

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

本文写作时不支持Dockerregistrysearchfunctionv2。 请参阅自2015年2月以来的讨论: https : //github.com/docker/distribution/issues/206

registryV2就像是将图像放入黑色的包里,希望你记得你丢下的东西以及你命名的图像。 甚至不要考虑删除图像。 我不想用V1来代替V2, 即使V1工作,并有几个工具与V1的工作,包括search和删除。 我从市场营销的registryV2开始; 更好的安全性和性能。

Ubuntu 14.04.3 LTS,CoreOS 723.3.0registrygithub.com/docker/distribution v2.1.1

我写了一个名为view-private-registry的脚本来searchregistryV2 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 

可从https://github.com/docker/distribution获得的最新版本的Docker Registry支持Catalog API。 (V2 / _catalog)。 这允许searchfunction。

如果有兴趣,你可以尝试我build立的docker image registry CLI,以便在新的Docker Registry v2发行版中使用searchfunction:( https://github.com/vivekjuneja/docker_registry_cli

正确。

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

基本上,每个容器都有一个日志文件… some-path / containers … ID-json.log。 在那个文件信息被存储关于被推送到正在运行的registry的图像。 所以它可以用来推断图像列表。 就像它是生的,它总比没有好。 不是更大的search/目录问题的解决scheme,而是一种获取图像列表的方法。 这是一个非常定制的解决scheme,以解决问题,同时等待“官方”修复。