Moby: No puedo entender cómo obtener image_id u otra información del repositorio privado

Creado en 15 mar. 2017  ·  3Comentarios  ·  Fuente: moby/moby


INFORMACIÓN DEL INFORME DE ERROR

Descripción

Usamos el repositorio privado de Docker en Docker Hub, cuando tenemos más de 10 imágenes.

Queremos obtener información sobre las imágenes de la ventana acoplable de la ventana acoplable para poder comparar las imágenes compiladas y presentadas actualmente en la ventana acoplable.

Intento usar curl para obtener el token de autenticación ejecutando comandos que encuentro en google.

Parece que:

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

Intento obtener tokens de las siguientes maneras:

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)

En todos los casos, obtengo algún token, intento obtener el manifiesto de mi repositorio privado, de las siguientes maneras:

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

Siempre consigue

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

¿Cómo corregir la obtención de toda la información necesaria para mí desde Docker Hub?

Cuando intento obtener etiquetas a través de

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

No tengo problemas.

Además, no puedo encontrar ninguna forma de trabajo para hacer lo que quiero.

Pasos para reproducir el problema:

  1. Tener imágenes privadas en hub.docker.com
  2. Obtener token de autenticación
  3. Intente obtener información de manifiesto u otra información de imagen de hub.docker.com

Describe los resultados que recibiste:

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

Describe los resultados que esperabas:

Json que contiene información de las imágenes actualmente presentadas en el concentrador de Docker

aredistribution kinquestion

Todos 3 comentarios

La discusión en https://github.com/docker/docker/issues/29257#issuecomment -266121974 probablemente esté relacionada aquí

Hola @westsouthnight , tal vez este script pueda ayudarte: https://gist.github.com/cirocosta/fb6b90cb7651ff21eda4838a73e3710b .
No usa -u para realizar la autenticación básica al recuperar el token, pero probé con un repositorio privado y agregué -u a get_token() { hecho funciona: con un registro privado I puede recuperar el registro solo si se usa -u .

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

Avísame si eso ayuda 👍

Permítanme cerrar este problema, ya que el rastreador de problemas de GitHub no está diseñado como un foro de soporte general,
sino para informar errores y solicitudes de funciones. Para otro tipo de preguntas, considere usar una de;

Esta pregunta tampoco está directamente relacionada con el código fuente de este repositorio, sino con Docker Hub (y la autenticación utilizada allí). Pero siéntete libre de continuar la conversación 👍

¿Fue útil esta página
0 / 5 - 0 calificaciones