Moby: Не могу понять, как получить image_id или другую информацию из частного репозитория

Созданный на 15 мар. 2017  ·  3Комментарии  ·  Источник: moby/moby


ИНФОРМАЦИЯ ОБ ОТЧЕТЕ ОБ ОШИБКЕ

Описание

Мы используем частный репозиторий докеров на концентраторе докеров, когда у вас больше 10 образов.

Мы хотим получить информацию об изображениях докеров из концентратора докеров, чтобы иметь возможность сравнивать созданные и представленные изображения в концентраторе докеров.

Я пытаюсь использовать curl для получения токена аутентификации, выполняя команды, которые я нахожу в Google.

Это выглядит как:

UNAME="exampleuser"
UPASS="examplepass"
PRODUCT="examplecompany"
REPOSITORY="$PRODUCT"
SERVICE="exampleservice"

Я пытаюсь получить жетоны следующими способами:

TOKEN=$(curl -u $UNAME:$UPASS "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPOSITORY:pull&account=$UNAME" | jq -r .token)

TOKEN=$(curl -u $UNAME:$UPASS "https://auth.docker.io/token?service=index.docker.io&scope=repository:$REPOSITORY:pull&account=$UNAME" | jq -r .token)

TOKEN=$(curl -u $UNAME:$UPASS "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPOSITORY:pull&account=$UNAME&offline_token=true" | jq -r .token)

TOKEN=$(curl -u $UNAME:$UPASS "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPOSITORY:$SERVICE:pull&account=$UNAME&offline_token=true" | jq -r .token)

TOKEN=$(curl -u $UNAME:$UPASS "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPOSITORY:$SERVICE&account=$UNAME&offline_token=true" | jq -r .token)

Во всех случаях я получаю токен, пытаюсь получить манифест из моего личного репозитория следующими способами:

1.

REPO="$PRODUCT/$SERVICE"
TAG=latest
REGISTRY=https://registry-1.docker.io/v2

URI="$REGISTRY/$REPO/manifests/$TAG"
echo URI=$URI
MANIFEST="`curl -skL -o /dev/null -D- $URI`"
CHALLENGE="`grep "Www-Authenticate" <<<"$MANIFEST"`"
if [[ CHALLENGE ]]; then
    IFS=\" read _ REALM _ SERVICE _ SCOPE _ <<<"$CHALLENGE"
    echo REALM is $REALM
    echo SERVICE is $SERVICE
    echo SCOPE is $SCOPE
    TOKEN="`curl -skL "$REALM?service=$SERVICE&scope=$SCOPE"`"
    IFS=\" read _ _ _ TOKEN _ <<<"$TOKEN"
    echo TOKEN is $TOKEN
    MANIFEST="`curl -isk -X GET -H "Authorization: Bearer $TOKEN" $URI`"
    echo "RESPONSE is $MANIFEST"
fi

2.

curl -s -D - -H  "Authorization: Bearer ${TOKEN}" -H "Accept: application/vnd.docker.distribution.manifest.v2+json" https://index.docker.io/v2/repositories/$PRODUCT/$SERVICE/manifests/latest

Всегда получаю

RESPONSE is HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
Docker-Distribution-Api-Version: registry/2.0
Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="examplecompany/exampleservice:pull",error="insufficient_scope"
Date: Wed, 15 Mar 2017 16:15:52 GMT
Content-Length: 155
Strict-Transport-Security: max-age=31536000

{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"examplecompany/exampleservice","Action":"pull"}]}]}

Как правильно получить всю необходимую мне информацию из докер-хаба?

Когда я пытаюсь получить теги через

REPO_LIST=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/${PRODUCT}/?page_size=10000 | jq -r '.results|.[]|.name')

У меня нет проблем.

Кроме того, я не могу найти способ делать то, что хочу.

Действия по воспроизведению проблемы:

  1. Размещайте личные изображения на сайте hub.docker.com
  2. Получить токен аутентификации
  3. Попробуйте получить информацию о манифесте или другую информацию об изображении с сайта hub.docker.com

Опишите полученные результаты:

{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"examplecompany/exampleservice","Action":"pull"}]}]}

Опишите ожидаемые результаты:

Json, которые содержат информацию о представленных в настоящее время образах docker-хаба.

aredistribution kinquestion

Все 3 Комментарий

Обсуждение на https://github.com/docker/docker/issues/29257#issuecomment -266121974, вероятно, связано здесь

Привет, @westsouthnight , может быть, этот скрипт вам поможет: https://gist.github.com/cirocosta/fb6b90cb7651ff21eda4838a73e3710b .
Он не использует -u для выполнения базовой аутентификации при получении токена, но я тестировал с частным репозиторием и добавлял -u к get_token() { действительно работает: с частным реестром я может получить реестр, только если используется -u .

  curl \
    -u user:pass \
    --silent \
    "https://auth.docker.io/token?scope=repository:$image:pull&service=registry.docker.io" \
    | jq -r '.token'

Дайте мне знать, если это поможет 👍

Позвольте мне закрыть эту проблему, так как трекер проблем GitHub на самом деле не предназначен в качестве общего форума поддержки,
но для сообщений об ошибках и запросов функций. Для других типов вопросов рассмотрите возможность использования одного из:

Этот вопрос также напрямую связан не с исходным кодом в этом репозитории, а с Docker Hub (и используемой там аутентификацией). Но смело продолжайте разговор 👍

Была ли эта страница полезной?
0 / 5 - 0 рейтинги