检查 docker hub 上是否已经存在 image:tag 组合

新手上路,请多包涵

作为 bash 脚本的一部分,我想检查 docker hub 上是否存在特定的 docker image:tag 组合。此外,它将是一个私有存储库。

即伪代码将是这样的:

 tag = something
if image:tag already exists on docker hub:
    Do nothing
else
    Build and push docker image with that tag

原文由 rgareth 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 540
2 个回答

请试试这个

function docker_tag_exists() {
    curl --silent -f -lSL https://index.docker.io/v1/repositories/$1/tags/$2 > /dev/null
}

if docker_tag_exists library/nginx 1.7.5; then
    echo exist
else
    echo not exists
fi


更新:

如果使用 Docker Registry v2(基于 ):

 # set username and password
UNAME="user"
UPASS="password"

function docker_tag_exists() {
    TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${UNAME}'", "password": "'${UPASS}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)
    curl --silent -f --head -lL https://hub.docker.com/v2/repositories/$1/tags/$2/ > /dev/null
}

if docker_tag_exists library/nginx 1.7.5; then
    echo exist
else
    echo not exists
fi

原文由 Evgeny Oskin 发布,翻译遵循 CC BY-SA 4.0 许可协议

更新: 无 Docker 解决方案见下文

使用 Docker

这是我使用 docker:stable 图像与 gitlab 一起使用的解决方案。

登录

docker login -u $USER -p $PASSWORD $REGISTRY

检查它是否存在:

 docker manifest inspect $IMGNAME:$IMGTAG > /dev/null ; echo $?

docker 将返回 0 成功或 1 失败。

如果您收到警告:更新 Docker 或启用实验性客户端功能

将环境变量 DOCKER_CLI_EXPERIMENTAL 设置为 enabled (参见下面 Matěj 的回答)

或者调整配置(原始答案):

 echo '{"experimental": "enabled"}' > ~/.docker/config.json

这也将覆盖您的配置。如果这不是一个选项,您需要手动执行此操作或使用 jqsed 或任何可用的。

不使用 Docker 进行测试

如果您无法访问 docker-daemon,您可以尝试 使用 Skopeo起重机

原文由 Morty 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题