如何使用 Docker 列出可用的存储库版本

问题描述 投票:0回答:4

有没有办法让Docker列出所有可以下载的可用镜像版本?

假设我想获取最新版本的 Apache,那么我可以输入以下内容:

docker pull httpd:latest

现在,如果我对特定版本感兴趣,我可以输入以下内容:

docker pull httpd:2.4.34

为了能够做到这一点,我需要知道有一个版本

2.4.34
可用。现在,有没有办法列出可用版本?我正在寻找类似的东西:

docker list httpd versions

我希望得到类似的回复:

2.4.34
2.4.32
2.4.29
2.2.34
...
docker version
4个回答
3
投票

此操作有一个 API 端点,解释如下:

https://docs.docker.com/registry/spec/api/#listing-image-tags

端点本身如下:

/v1/repositories/(namespace)/(repository)/tags

因此您可以运行以下命令来访问它:

curl -u <username>:<password> https://registry-1.docker.io/v1/repositories/<username>/<image_name>/tags

0
投票

我不知道docker是否支持这个,但是

podman
--list-tags
:

podman search nginx --list-tags

显示(截断):

NAME                     TAG
docker.io/library/nginx  1
docker.io/library/nginx  1-alpine
docker.io/library/nginx  1-alpine-perl
docker.io/library/nginx  1-perl
docker.io/library/nginx  1.10
...
docker.io/library/nginx  1.11.12
docker.io/library/nginx  1.11.12-alpine
docker.io/library/nginx  1.11.13

当结果很多时,

--limit
参数可以和
--list-tags
一起派上用场。
podman search --list-tags --limit 1000 docker.io/library/mariadb
显示 365 个结果...


0
投票

使用skopeo

brew install skopeo
skopeo list-tags docker://docker.io/redis
skopeo list-tags docker://container-registry.oracle.com/database/free

这将返回一个 JSON 对象,显示所有可用的图像版本


0
投票

这是使用 OCI 标签列表 API 完成的。在 Docker Hub 上调用该脚本的 shell 脚本如下所示:

token=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repo}:pull" \
             -u "${username}:${password}" \
        | jq -r '.token')
curl -H "Authorization: Bearer $token" \
     -s "https://registry-1.docker.io/v2/${repo}/tags/list" | jq .

但是,我建议使用为此设计的各种工具之一,这将有助于身份验证(或匿名访问)和分页(当标签数量超过注册表限制时)。以下是我所知道的一些工具:

来自 Google 的起重机:

$ crane ls busybox
1
1-glibc
1-musl
1-ubuntu
1-uclibc
1.21-ubuntu
1.21.0-ubuntu
1.23
1.23.2
1.24
1.24-glibc
1.24-musl
1.24-uclibc
...

来自微软的ORAS:

$ oras repo tags docker.io/library/busybox
1
1-glibc
1-musl
1-ubuntu
1-uclibc
1.21-ubuntu
1.21.0-ubuntu
1.23
1.23.2
1.24
1.24-glibc
1.24-musl
1.24-uclibc
...

来自 RedHat 的 Skopeo:

$ skopeo list-tags docker://docker.io/library/busybox
{
    "Repository": "docker.io/library/busybox",
    "Tags": [
        "1",
        "1-glibc",
        "1-musl",
        "1-ubuntu",
        "1-uclibc",
        "1.21-ubuntu",
        "1.21.0-ubuntu",
        "1.23",
        "1.23.2",
        "1.24",
        "1.24-glibc",
        "1.24-musl",
        "1.24-uclibc",
...

我自己的regctl:

$ regctl tag ls busybox
1
1-glibc
1-musl
1-ubuntu
1-uclibc
1.21-ubuntu
1.21.0-ubuntu
1.23
1.23.2
1.24
1.24-glibc
1.24-musl
1.24-uclibc
...
© www.soinside.com 2019 - 2024. All rights reserved.