Moby: Kann nicht verstehen, wie man image_id oder andere Informationen aus einem privaten Repository erhält

Erstellt am 15. März 2017  ·  3Kommentare  ·  Quelle: moby/moby


INFORMATIONEN ZUM FEHLERBERICHT

Beschreibung

Wir verwenden das private Docker-Repository auf dem Docker-Hub, wenn mehr als 10 Bilder vorhanden sind.

Wir möchten Informationen zu Docker-Images von Docker Hub abrufen, um erstellte und aktuell präsentierte Bilder auf Docker Hub vergleichen zu können.

Ich versuche, curl für das Abrufen des Authentifizierungstokens zu verwenden, indem ich Befehle ausführe, die ich in Google finde.

Es sieht aus wie:

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

Ich versuche, Token auf folgende Weise zu erhalten:

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)

In allen Fällen erhalte ich ein Token, den Versuch, ein Manifest aus meinem privaten Repository zu erhalten, indem ich folgende Möglichkeiten habe:

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

Bekomme immer

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

Wie kann ich korrigieren, um alle für mich benötigten Informationen von Docker Hub zu erhalten?

Wenn ich versuche, Tags über zu erhalten

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

Ich habe keine Probleme.

Außerdem kann ich keinen Arbeitsweg finden, um zu tun, was ich will.

Schritte zum Reproduzieren des Problems:

  1. Habe ein privates Bild auf hub.docker.com
  2. Auth-Token abrufen
  3. Versuchen Sie, Manifestinformationen oder andere Bildinformationen von hub.docker.com abzurufen

Beschreiben Sie die Ergebnisse, die Sie erhalten haben:

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

Beschreiben Sie die erwarteten Ergebnisse:

Json, die Informationen zu derzeit auf Docker-Hub-Images angezeigten Bildern enthalten.

aredistribution kinquestion

Alle 3 Kommentare

Die Diskussion auf https://github.com/docker/docker/issues/29257#issuecomment -266121974 hängt wohl hier zusammen

Hey @westsouthnight , vielleicht kann dir dieses Skript helfen: https://gist.github.com/cirocosta/fb6b90cb7651ff21eda4838a73e3710b .
Es verwendet nicht -u , um die grundlegende Authentifizierung beim Abrufen des Tokens durchzuführen, aber ich habe es mit einem privaten Repository getestet und das Hinzufügen von -u zu get_token() { funktioniert tatsächlich: mit einer privaten Registrierung I kann die Registrierung nur abrufen, wenn -u verwendet wird.

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

Lass mich wissen, ob das hilft 👍

Lassen Sie mich dieses Problem schließen, da der GitHub Issue Tracker nicht wirklich als allgemeines Support-Forum gedacht ist.
sondern zum Melden von Fehlern und Funktionsanfragen. Ziehen Sie für andere Arten von Fragen in Betracht, eine der folgenden Fragen zu verwenden;

Auch diese Frage bezieht sich nicht direkt auf den Quellcode in diesem Repository, sondern auf Docker Hub (und die dort verwendete Authentifizierung). Aber führe das Gespräch gerne weiter 👍

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen