gpt4 book ai didi

docker - Dockerhub:列出给定镜像的所有可用版本?

转载 作者:行者123 更新时间:2023-12-02 18:09:29 25 4
gpt4 key购买 nike

我正在寻找一种列出Dockerhub镜像的所有公开可用版本的方法。有没有办法可以做到这一点?

具体来说,我对openjdk:8-jdk-alpine图片感兴趣。

Dockerhub通常仅列出每个镜像的最新版本,并且没有链接到历史版本。对于 openjdk ,当前为8u191-jdk-alpine3.8:

Dockerhub openjdk alpine

但是,如果我们知道旧版本的图像摘要ID,则可以拉出旧版本:

openjdk:8-jdk-alpine@sha256:1fd5a77d82536c88486e526da26ae79b6cd8a14006eb3da3a25eb8d2d682ccd6
openjdk:8-jdk-alpine@sha256:c5c705b462abab858066d412b3f871865684d8f837571c98b68e78c505dc7549

幸运的是,我可以通过搜索 openjdk8 alpine digest并查看github票证(其中包括图像摘要)来找到OpenJDK 8(分别为Java版本1.8.0_171和1.8.0_151)的这些摘要。

但是,是否有系统的方式列出所有公开可用的摘要?

查看 docker search文档,似乎没有列出图像版本的选项,只能按名称搜索。

最佳答案

您不需要摘要即可提取“旧”图像,而宁愿使用其标签(即使它们未显示在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
[...]

如果您不想/不想安装 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 $3}'

(我很确定我是从另一个问题得到这个命令的,但是我找不到位置)

您当然可以过滤此命令的输出,并仅保留您感兴趣的标签:
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'

关于docker - Dockerhub:列出给定镜像的所有可用版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54418542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com