如何在远程registry中列出Docker映像的所有标记?

我想知道如何使用CLI(首选)或curl在远程Dockerregistry(我们的情况是tutum ,但我不认为这很重要)列出Docker镜像的所有标记? 最好不要拉远程registry的所有版本,我只想列出标签。

我从这里得到了答案。 非常感谢! 🙂

只是一行脚本:(find所有的debain标签)

wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}' 

更新感谢@ degelf的build议。 这是shell脚本。

 #!/bin/bash if [ $# -lt 1 ] then cat << HELP dockertags -- list all tags for a Docker image on a remote registry. EXAMPLE: - list all tags for ubuntu: dockertags ubuntu - list all php tags containing apache: dockertags php apache HELP fi image="$1" tags=`wget -q https://registry.hub.docker.com/v1/repositories/${image}/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'` if [ -n "$2" ] then tags=` echo "${tags}" | grep "$2" ` fi echo "${tags}" 

您可以在/ usr / local / bin下创build一个新的文件名dockertags (或者在您的.bashrc / dockertags添加一个PATH env),然后将这些代码放在里面。 然后添加可执行权限( chmod +x dockertags )。

用法:

dockertags ubuntu —>列出Ubuntu的所有标签

dockertags php apache —>列出所有php标签php包含“apache”

从Docker Registry V2开始,一个简单的GET就足够了:

 GET /v2/<name>/tags/list 

请参阅文档了解更多。

我已经设法使用curl来工作:

 curl -u <username>:<password> https://tutum.co/v1/repositories/<username>/<image_name>/tags 

请注意, image_name不应包含用户详细信息等。例如,如果您要推送名为tutum.co/username/x image_nameimage_name应为x

如果您想使用docker registry v2 API,它会按页面列出标签。 要列出图片的所有标签,您可能需要为url添加一个大的page_size参数,例如

 curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/centos/tags?page_size=1024'|jq '."results"[]["name"]' 

请参阅CLI实用程序: https : //www.npmjs.com/package/docker-browse

允许枚举标签和图像。

docker-browse tags <image>将列出docker-browse tags <image>所有标签。 docker-browse tags library/alpine

docker-browse images将列出registry中的所有图像。 目前不可用于index.docker.io

您可以将其连接到任何registry,包括您的私有registry,只要它支持DockerregistryHTTP API V2即可

Docker Registry API有一个端点来列出所有的标签 。

看起来像Tutum有一个类似的端点 ,以及通过tutum-cli访问的方式。

随着tutum-cli,请尝试以下内容:

 tutum tag list <uuid> 

如果JSONparsing工具jq可用

 wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O - | \ jq -r .[].name 

你也可以使用这个废料:

 # vim /usr/sbin/docker-tags 

&追加以下(照原样):

 #!/bin/bash im="$1" [[ -z "$im" ]] && { echo -e '\e[31m[-]\e[39m Where is the image name ??' ; exit ; } [[ -z "$(echo "$im"| grep -o '/')" ]] && { link="https://hub.docker.com/r/library/$im/tags/" ; } || { link="https://hub.docker.com/r/$im/tags/" ; } resp="$(curl -sL "$link")" err="$(echo "$resp" | grep -o 'Page Not Found')" if [[ ! -z "$err" ]] ; then echo -e "\e[31m[-]\e[39m No Image Found with name => [ \e[32m$im\e[39m ]" exit else tags="$(echo "$resp"|sed -e 's|}|\n|g' -e 's|{|\n|g'|grep '"result"'|sed -e 's|,|\n|g'|cut -d '[' -f2|cut -d ']' -f1|sed '/"tags":/d'|sed -e 's|"||g')" echo -e "\e[32m$tags\e[39m" fi 

让它可执行:

 # chmod 755 /usr/sbin/docker-tags 

然后最后尝试:

 $ docker-tags testexampleidontexist [-] No Image Found with name => [ testexampleidontexist ] $ docker search ubuntu $ docker-tags teamrock/ubuntu latest 

[希望你在运行任何命令之前知道$ ]

获取Docker Hub的所有标签:该命令使用命令行JSON处理器jq从Docker Hub Registry返回的JSONselect标签名(引号用tr去除)。 用Docker Hub用户名replacedebian用图像名称:

 curl -s 'https://registry.hub.docker.com/v2/repositories/library/debian/tags/' | jq '."results"[]["name"]' | tr -d '"' 
 curl -u <username>:<password> https://$your_registry/v2/$image_name/tags/list -s -o - | \ tr -d '{' | tr -d '}' | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | \ awk -F: '{print $3}' | sed -e 's/,/\n/g' 

你可以使用它,如果你的env没有'jq',=)