Как проверить, существует ли определенный тег образа докера в gcr.io? - PullRequest
1 голос
/ 25 марта 2019

Я заметил с gcr.io, что когда я нажимаю на изображение докера с определенным тегом:

gcr.io/myproject/myimage:mytag

Если эта комбинация изображения / тега уже существует, возможно, исходное изображение размечено, загружено новое и применено тег к новому.

Это приводит к тому, что мое репо становится раздутым с большим количеством не маркированных версий одного и того же изображения.

Как проверить, существует ли комбинация изображений / тегов в gcr.io, чтобы я нажимал только тогда, когда это необходимо?

Ответы [ 3 ]

0 голосов
/ 18 мая 2019

Вот как я решил это в скрипте оболочки

existing_tags=$(gcloud container images list-tags --filter="tags:mytag" --format=json gcr.io/myproject/myimage)

if [[ "$existing_tags" == "[]" ]]; then
  printf "tag does not exist"
else
  printf "tag exists"
fi

Объяснение

Я использую gcloud container images list-tags ( документация здесь )

  • И фильтрация на соответствие тегов mytag с использованием флага --filter

  • и форматирование в формате JSON с использованием --format=json

По сути, если тег mytag не не существует, на выходе будет пустой массив [], в противном случае он существует. Вы можете проверить это действительно просто путем сравнения строк в вашем скрипте, а затем продолжить соответствующим образом.

0 голосов
/ 27 июня 2019

Есть несколько хороших ответов выше. Но я просто хочу дать еще одну опцию, которую я использую.

#!/bin/bash

REPO_URL=gcr.io/myproject/myimage
TAG=mytag

TAG_EXISTING="$(gcloud container images list-tags --format='get(tags)' $REPO_URL | grep $TAG)"
if [ -z $TAG_EXISTING ]
then
    docker push $REPO_URL:$TAG
fi
0 голосов
/ 25 марта 2019

Метод 1: Предполагая, что ваша команда docker имеет учетные данные gcr, вы можете попытаться получить изображение как docker pull gcr.io/foo/image:tag. Это будет медленно, но это гарантированный путь.

Метод 2: Предполагая, что в вашей среде присутствует gcloud, вы можете запустить gcloud container images list-tags [- -format=json] gcr.io/foo/image и посмотреть, есть ли на выходе tag, который вы хотите.

Метод 3: Если эти два решения вам не подходят, вы можете узнать, как использовать учетную запись облачной службы Google в качестве имени пользователя / пароля для докера здесь , и затем используйте Docker Registry v2 API до Список изображений тегов или просто напрямую Запрос манифеста изображения для вытягивания изображения с помощью tag.

Например, если у вас было gcr.io/foo/alpine:v1 изображение, чтобы проверить это с помощью cURL и временного access_token (полученного через gcloud), вы можете запустить:

TOKEN="$(gcloud config config-helper --format 'value(credential.access_token)')"

curl -H "Authorization: Bearer $TOKEN" \
    https://gcr.io/v2/foo/alpine/manifests/v1

и если вы получите ответ 200 OK, это означает, что тег существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...