如何检查registry上是否存在带有特定标签的Docker镜像?

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

我想检查注册表中是否存在具有特定标签的docker镜像。

我看到了这个帖子: 如何检查本地是否存在带有特定标签的 docker 镜像

但它处理本地系统上的图像。

如何使用

docker image inspect
(或其他命令)检查远程注册表上是否存在具有特定标签的图像?

docker
5个回答
5
投票

我不用拉就找到了路:

curl -X GET http://my-registry/v2/image_name/tags/list

地点:

  • 我的注册表 - 注册表名称
  • image_name - 我搜索的图像名称

结果显示注册表中所有标签


2
投票

另一种可能性是使用

docker pull
- 如果退出代码为 1,则它不存在。如果退出代码为 0,则它确实存在。

docker pull <my-registry/my-image:my-tag>
echo $?  # print exit code

缺点:如果镜像确实存在(但不在本地),即使您不想,它也会拉取整个镜像。根据您实际想要做和实现的目标,这可能是一个解决方案,也可能是浪费时间。


1
投票

docker search
,但它仅适用于 Docker Hub。通用解决方案是使用
docker pull
:

的简单 shell 脚本
#!/bin/bash

function check_image() {
    # pull image
    docker pull $1 >/dev/null 2>&1
    # save exit code
    exit_code=$?
    if [ $exit_code = 0 ]; then
        # remove pulled image
        docker rmi $1 >/dev/null 2>&1
        echo Image $1 exists!
    else
        echo "Image $1 does not exist :("
    fi
}
check_image hello-world:latest
# will print 'Image hello-world:latest exists!'
check_image hello-world:nonexistent
# will print 'Image hello-world:nonexistent does not exist :('

上述方法的缺点是拉取图像的速度慢且需要可用空间。


0
投票

如果您使用的是 AWS ECR,则可以使用此处提供的解决方案 https://gist.github.com/outofcoffee/8f40732aefacfded14cce8a45f6e5eb1

这使用 AWS CLI 查询 ECR 并将使用您配置的任何凭证。这可以让您更轻松,因为如果您已经在 AWS 中使用这些凭证,则无需直接担心此请求的凭证。

从此处复制要点中的解决方案

#!/usr/bin/env bash
# Example:
#    ./find-ecr-image.sh foo/bar mytag

if [[ $# -lt 2 ]]; then
    echo "Usage: $( basename $0 ) <repository-name> <image-tag>"
    exit 1
fi

IMAGE_META="$( aws ecr describe-images --repository-name=$1 --image-ids=imageTag=$2 2> /dev/null )"

if [[ $? == 0 ]]; then
    IMAGE_TAGS="$( echo ${IMAGE_META} | jq '.imageDetails[0].imageTags[0]' -r )"
    echo "$1:$2 found"
else
    echo "$1:$2 not found"
    exit 1
fi

0
投票

使用 Azure 容器注册表时,您可以使用 Azure CLI 来探测映像标签,而无需拉取。

$ az acr repository show -n myregistry --image path/to/image:some-tag
© www.soinside.com 2019 - 2024. All rights reserved.