无需拉取即可检查docker镜像

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

我需要在注册表中检查 docker 镜像,而不是在本地拉取它。

具体来说,我需要获取所有的回购标签。相当于当地

docker inspect some-image | jq -r '.[0].RepoTags[]'

更具体一点,对于

some-image:latest
,如果它除了“最新”之外还有一个版本标签

已经有SO问题了,比如这个。提到了Regclient,它重复了官方API返回的内容。至少,我在玩过

curl
manifests
regctl image [manifest|inspect|digest]
之后得到了这样的印象

Medium 上有一段美丽的绿色背景,Inspecting docker image ...。而

 curl \
    --silent \
    --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
    "http://REGISTRY_ADDRESS/v2/$image/manifests/$tag" |
    jq -r '.config.digest'

...结果中没有

.config.digest
(甚至
.config

我针对私有存储库运行它,所以 HTTP API 是我最好的选择

docker image curl docker-registry
2个回答
0
投票

也许您正在寻找

skopeo
命令?
skopeo list-tags
命令将允许您列出图像的所有可用标签。例如:

$ skopeo list-tags docker://docker.io/hello-world
{
    "Repository": "docker.io/library/hello-world",
    "Tags": [
        "latest",
        "linux",
        "nanoserver",
        "nanoserver-1709",
        "nanoserver-1803",
        "nanoserver-1809",
        "nanoserver-ltsc2022",
        "nanoserver-sac2016",
        "nanoserver1709"
    ]
}

0
投票

要在注册表中获取 Docker 镜像的所有 repo 标签而不在本地拉取它,您可以使用 Docker Registry HTTP API。

curl -s "http://REGISTRY_ADDRESS/v2/REPO_NAME/tags/list" | jq -r '.tags[]'

具体获取some-image:latest的version tag,可以先用前面的命令获取repository的所有tag列表,然后过滤具体的version tag:

curl -s "http://REGISTRY_ADDRESS/v2/REPO_NAME/tags/list" | jq -r 'map(select(. | test("^some-image:[0-9.]+$")))[0]'
© www.soinside.com 2019 - 2024. All rights reserved.