Moby: Impossible de comprendre comment obtenir image_id ou un autre référentiel privé de formulaire d'informations

Créé le 15 mars 2017  ·  3Commentaires  ·  Source: moby/moby


INFORMATIONS SUR LE RAPPORT DE BOGUE

La description

Nous utilisons le référentiel privé docker sur docker hub, lorsque nous avons plus de 10 images.

Nous voulons obtenir des informations sur les images docker du hub docker pour pouvoir comparer les images construites et actuellement présentées sur le hub docker.

J'essaie d'utiliser curl pour obtenir un jeton d'authentification en exécutant des commandes que je trouve dans google.

On dirait:

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

J'essaie d'obtenir des jetons de la manière suivante :

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)

Dans tous les cas, j'obtiens un jeton, j'essaye d'obtenir un manifeste à partir de mon référentiel privé, de la manière suivante :

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

Obtenez toujours

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"}]}]}

Comment corriger l'obtention de toutes les informations nécessaires pour moi à partir du hub docker?

Lorsque j'essaie d'obtenir des balises via

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

Je n'ai pas de problèmes.

De plus, je ne trouve aucun moyen de travailler pour faire ce que je veux.

Étapes pour reproduire le problème :

  1. Avoir des images privées sur hub.docker.com
  2. Obtenir un jeton d'authentification
  3. Essayez d'obtenir des informations sur le manifeste ou d'autres informations sur l'image à partir de hub.docker.com

Décrivez les résultats que vous avez reçus :

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

Décrivez les résultats que vous attendiez :

Json qui contient des informations sur les images actuellement présentées sur le hub docker.

aredistribution kinquestion

Tous les 3 commentaires

La discussion sur https://github.com/docker/docker/issues/29257#issuecomment -266121974 est probablement liée ici

@westsouthnight , peut-être que ce script peut vous aider : https://gist.github.com/cirocosta/fb6b90cb7651ff21eda4838a73e3710b .
Il n'utilise pas -u pour effectuer l'authentification de base lors de la récupération du jeton mais j'ai testé avec un référentiel privé et l'ajout de -u à get_token() { fonctionne en effet : avec un registre privé I peut récupérer le registre uniquement si -u est utilisé.

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

Dites moi si ça aide

Permettez-moi de clore ce problème, car le suivi des problèmes GitHub n'est pas vraiment conçu comme un forum d'assistance général,
mais pour signaler des bogues et des demandes de fonctionnalités. Pour d'autres types de questions, envisagez d'utiliser l'un des éléments suivants :

Cette question n'est pas non plus directement liée au code source de ce référentiel, mais à Docker Hub (et à l'authentification qui y est utilisée). Mais n'hésitez pas à continuer la conversation

Cette page vous a été utile?
0 / 5 - 0 notes