如何查询Docker Image的所有Tag

Posted by Jeremy Song on 2021-09-04
Estimated Reading Time 3 Minutes
Words 799 In Total
Viewed Times

在使用 Docker 时,查询一个 Docker镜像(Docker image)。一般使用 docker search keywords 命令来查询 keywords 的镜像信息,如下:

并且通常使用 docker pull imagename 命令从远端仓库拉取镜像。默认情况下会拉取到 tag 为 lastest 的镜像。但是,如果不想使用这个 tag 的镜像应该怎么办?

下面介绍两种查询指定镜像所有标签的方法。

直接去dockerHub查询

可以直接访问 https://hub.docker.com/search 并输入查询关键字来查询指定镜像的 tags,如下:

点击最佳匹配的查询结果:

至此,通过页面上的 Filter Tags 控件可以更加精细的查询期望使用的 tag。

通过API接口获取

除过以上方法之外,还可以直接调用 DockerHub 提供的API接口来获取我们想要的镜像 tag。

URL: https://${host}/v1/repositories/${name}/tags

Method: Get

注意: v2版本的接口已经变成如下格式,当前v1和v2两个版本的接口都可以使用,故不赘述。想了解更多关系v2接口的信息可以查阅 https://docs.docker.com/registry/spec/api/#tags

我们可以使用任何Http客户端工具来调用这个API接口。wget,okhttp,postman 或者其他自己熟悉的客户端都可以。下面是我用 Postman 访问接口获取到的数据:

OK!到此我们也已经获取到了我们所期望的 Tag 信息。

更加完善的方案

Stackoverflow 上有位朋友用使用接口的方式写了一个脚本,使得查询 Tag 信息更加的方便和快捷。核心的 shell 片段为:

1
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}'

以下是完整的shell脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/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}"

如果你查询镜像 Tag 的频率不高,使用第一个核心代码片段就可以了。如果您的使用频次比较高,还有一个更好的办法供你选择。

您可以将如上完整的代码片段写入一个 shell 脚本,比如命名为 dockertags。并将该文件移动到 /usr/local/bin 目录,或者其他任意目录也可以,但是您记得要将脚本所在的目录加入到 PATH 环境变量中去。另外,记得不要忘了使用 chmod +x dockertags 命令给脚本执行权限。这样你就可以像使用 ls cat 等命名一样方便的查询期望的 Tag 了。

两种使用语法

1
dockertags ${imageName}

1
dockertags ${imageName} ${filter}

OK! Enjoy Yourself~ (●ˇ∀ˇ●)


欢迎关注我的公众号 须弥零一,跟我一起学习IT知识。


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !