Dockerhub:列出给定图像的所有可用版本?
Dockerhub: listing all available versions of a given image?
我正在寻找一种方法来列出来自 Dockerhub 的图像的所有公开可用版本。有什么办法可以实现吗?
具体来说,我对 openjdk:8-jdk-alpine
图片感兴趣。
Dockerhub 通常只列出每个镜像的最新版本,没有指向历史版本的链接。对于 openjdk
,目前是 8u191-jdk-alpine3.8
:
但是,如果我们知道它们的图像摘要 ID,则可以提取旧版本:
openjdk:8-jdk-alpine@sha256:1fd5a77d82536c88486e526da26ae79b6cd8a14006eb3da3a25eb8d2d682ccd6
openjdk:8-jdk-alpine@sha256:c5c705b462abab858066d412b3f871865684d8f837571c98b68e78c505dc7549
幸运的是,我通过谷歌搜索 openjdk8 alpine digest
并查看 github 票,其中包括图像摘要。
但是,是否有一种系统的方法来列出所有公开可用的摘要?
查看docker search
文档,似乎没有列出图像版本的选项,只能按名称搜索。
您不需要摘要来拉取 "old" 图像,您宁愿使用它们的标签(即使它们没有显示在 Docker Hub 中)。
我使用以下命令检索特定图像的标签,解析 https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags
的输出:
REPOSITORY=openjdk # can be "<registry>/<image_name>" ("google/cloud-sdk" for example)
wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
jq -r '.[].name'
REPOSITORY=openjdk
的结果(撰写本文时有 1593 个标签)如下所示:
latest
10
10-ea
10-ea-32
10-ea-32-experimental
10-ea-32-jdk
10-ea-32-jdk-experimental
10-ea-32-jdk-slim
10-ea-32-jdk-slim-experimental
10-ea-32-jre
[...]
如果你t/don不想安装jq
(操作JSON的工具),那么你可以使用:
wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | \
tr '}' '\n' | \
awk -F: '{print }'
(我很确定我从另一个问题得到了这个命令,但我找不到在哪里)
您当然可以过滤此命令的输出,只保留您感兴趣的标签:
wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
jq -r '.[].name | select(match("^8.*jdk-alpine"))'
或:
wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
jq -r '.[].name' \
grep -E '^8.*jdk-alpine'
我正在寻找一种方法来列出来自 Dockerhub 的图像的所有公开可用版本。有什么办法可以实现吗?
具体来说,我对 openjdk:8-jdk-alpine
图片感兴趣。
Dockerhub 通常只列出每个镜像的最新版本,没有指向历史版本的链接。对于 openjdk
,目前是 8u191-jdk-alpine3.8
:
但是,如果我们知道它们的图像摘要 ID,则可以提取旧版本:
openjdk:8-jdk-alpine@sha256:1fd5a77d82536c88486e526da26ae79b6cd8a14006eb3da3a25eb8d2d682ccd6
openjdk:8-jdk-alpine@sha256:c5c705b462abab858066d412b3f871865684d8f837571c98b68e78c505dc7549
幸运的是,我通过谷歌搜索 openjdk8 alpine digest
并查看 github 票,其中包括图像摘要。
但是,是否有一种系统的方法来列出所有公开可用的摘要?
查看docker search
文档,似乎没有列出图像版本的选项,只能按名称搜索。
您不需要摘要来拉取 "old" 图像,您宁愿使用它们的标签(即使它们没有显示在 Docker Hub 中)。
我使用以下命令检索特定图像的标签,解析 https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags
的输出:
REPOSITORY=openjdk # can be "<registry>/<image_name>" ("google/cloud-sdk" for example)
wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
jq -r '.[].name'
REPOSITORY=openjdk
的结果(撰写本文时有 1593 个标签)如下所示:
latest
10
10-ea
10-ea-32
10-ea-32-experimental
10-ea-32-jdk
10-ea-32-jdk-experimental
10-ea-32-jdk-slim
10-ea-32-jdk-slim-experimental
10-ea-32-jre
[...]
如果你t/don不想安装jq
(操作JSON的工具),那么你可以使用:
wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | \
tr '}' '\n' | \
awk -F: '{print }'
(我很确定我从另一个问题得到了这个命令,但我找不到在哪里)
您当然可以过滤此命令的输出,只保留您感兴趣的标签:
wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
jq -r '.[].name | select(match("^8.*jdk-alpine"))'
或:
wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
jq -r '.[].name' \
grep -E '^8.*jdk-alpine'