如何在docker命令行中的dockerregistry中find具有特定标记的docker图像?

我试图find一个泊坞窗图像的特定标签,我怎样才能在命令行? 我尽量避免全部下载并删除不需要的图像。

在官方Ubuntu版本https://registry.hub.docker.com/_/ubuntu/中有几个标签(发布),而当我在命令行中search

user@ubuntu:~$ docker search ubuntu | grep ^ubuntu ubuntu Official Ubuntu base image 354 ubuntu-upstart Upstart is an event-based replacement for ... 7 ubuntufan/ping 0 ubuntu-debootstrap 0 

另外在命令行search的帮助下https://docs.docker.com/engine/reference/commandline/search/ ,不知道如何工作?

是否有可能在docker search命令?

如果我使用raw命令通过dockerregistryAPI进行search,则可以获取信息

  $ curl https://registry.hub.docker.com//v1/repositories/ubuntu/tags | python -mjson.tool [ { "layer": "ef83896b", "name": "latest" }, ..... { "layer": "463ff6be", "name": "raring" }, { "layer": "195eb90b", "name": "saucy" }, { "layer": "ef83896b", "name": "trusty" } ] 

据我所知,CLI不允许在存储库中search/列出标签。

但是,如果你知道你想要哪个标签,你可以通过添加一个冒号和图像名称来明确地拉动它: docker pull ubuntu:saucy

使用CoreOS jq可以parsingjson数据。

所以就像你之前做的一样,看library/centos

 admin@coreos ~/curl -s -S 'https://registry.hub.docker.com/v2/repositories/library/centos/tags/' | jq '."results"[]["name"]' |sort "6" "6.7" "centos5" "centos5.11" "centos6" "centos6.6" "centos6.7" "centos7.0.1406" "centos7.1.1503" "latest" 

清洁v2 api现在可用,这就是我正在使用的例子。 我将构build一个简单的脚本docker_remote_tags

 #!/usr/bin/bash curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | jq '."results"[]["name"]' |sort 

启用:

 $ ./docker_remote_tags library/centos "6" "6.7" "centos5" "centos5.11" "centos6" "centos6.6" "centos6.7" "centos7.0.1406" "centos7.1.1503" "latest" 

参考:

jq : https : jq | apt-get install jq

这个脚本(docker-show-repo-tags.sh)应该适用于任何启用docker的主机。

 #!/bin/sh # # Simple script that will display docker repository tags. # # Usage: # $ docker-show-repo-tags.sh ubuntu centos for Repo in $* ; do curl -s -S "https://registry.hub.docker.com/v2/repositories/library/$Repo/tags/" | \ sed -e 's/,/,\n/g' -e 's/\[/\[\n/g' | \ grep '"name"' | \ awk -F\" '{print $4;}' | \ sort -fu | \ sed -e "s/^/${Repo}:/" done 

这是使用示例的输出:

 $ docker-show-repo-tags.sh ubuntu centos ubuntu:14.04 ubuntu:14.04.3 ubuntu:15.04 ubuntu:15.10 ubuntu:latest ubuntu:trusty ubuntu:trusty-20151028 ubuntu:vivid ubuntu:wily ubuntu:wily-20151019 centos:5.11 centos:6.6 centos:6.7 centos:7.0.1406 centos:7.1.1503 centos:centos5.11 centos:centos6.6 centos:centos6.7 centos:centos7.0.1406 centos:centos7.1.1503 

我编写了一个命令行工具来简化在我的PyTools GitHub仓库中searchDockerHub repo标签的工作。 使用各种命令行开关很简单,但最基本的是:

 ./dockerhub_show_tags.py repo1 repo2 

它甚至可以作为docker的形象,可以采取多个回购:

 docker run harisekhon/pytools dockerhub_show_tags.py centos ubuntu DockerHub repo: centos tags: 5.11 6.6 6.7 7.0.1406 7.1.1503 centos5.11 centos6.6 centos6.7 centos7.0.1406 centos7.1.1503 repo: ubuntu tags: latest 14.04 15.10 16.04 trusty trusty-20160503.1 wily wily-20160503 xenial xenial-20160503 

如果你想embedded脚本,使用-q / –quiet来获得标签,就像普通的docker命令一样:

 ./dockerhub_show_tags.py centos -q 5.11 6.6 6.7 7.0.1406 7.1.1503 centos5.11 centos6.6 centos6.7 centos7.0.1406 centos7.1.1503 

v2 API似乎使用某种分页方式,所以它不会返回所有可用的标签。 这在诸如python (或者library/python )等项目中是清晰可见的。 即使在快速阅读文档后 ,我也无法正确使用API​​(可能是错误的文档)。

然后我使用v1 API重写了脚本,仍然使用jq

 #!/bin/bash repo="$1" if [[ "${repo}" != */* ]]; then repo="library/${repo}" fi url="https://registry.hub.docker.com/v1/repositories/${repo}/tags" curl -s -S "${url}" | jq '.[]["name"]' | sed 's/^"\(.*\)"$/\1/' | sort 

完整的脚本可在以下urlfind: https : //bitbucket.org/denilsonsa/small_scripts/src/default/docker_remote_tags.sh

我还写了一个改进版本(用Python),它汇集了指向相同版本的标签: https : //bitbucket.org/denilsonsa/small_scripts/src/default/docker_remote_tags.py

前一篇文章的重新实现,使用Python over sed / awk

 for Repo in $* ; do tags=$(curl -s -S "https://registry.hub.docker.com/v2/repositories/library/$Repo/tags/") python - <<EOF import json tags = [t['name'] for t in json.loads('''$tags''')['results']] tags.sort() for tag in tags: print "{}:{}".format('$Repo', tag) EOF done 

对于在dockerhub上使用Oauth持票人标记的脚本,请尝试此操作

https://stackoverflow.com/a/38277663/2765671