Moby: Não consigo entender como obter image_id ou outro repositório privado de formulário de informações

Criado em 15 mar. 2017  ·  3Comentários  ·  Fonte: moby/moby


INFORMAÇÕES DE RELATÓRIO DE ERROS

Descrição

Usamos repositório privado docker no hub docker, quando temos mais de 10 imagens.

Queremos obter informações das imagens do docker do hub do docker para poder comparar imagens construídas e atualmente apresentadas no hub do docker.

Tento usar curl para obter o token de autenticação executando comandos que encontro no google.

Parece:

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

Tento obter tokens das seguintes maneiras:

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)

Em todos os casos, recebo algum token, e tento obter o manifesto do meu repositório privado, das seguintes maneiras:

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

Sempre obter

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

Como corrigir todas as informações necessárias para mim do hub do docker?

Quando tento obter tags via

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

Eu não tenho problemas.

Além disso, não consigo encontrar nenhuma forma de trabalho para fazer o que quero.

Etapas para reproduzir o problema:

  1. Tenha uma imagem privada em hub.docker.com
  2. Obter token de autenticação
  3. Tente obter informações de manifesto ou outras informações de imagem em hub.docker.com

Descreva os resultados que você recebeu:

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

Descreva os resultados que você esperava:

Json que contém informações apresentadas atualmente nas imagens do hub do docker.

aredistribution kinquestion

Todos 3 comentários

A discussão em https://github.com/docker/docker/issues/29257#issuecomment -266121974 provavelmente está relacionada aqui

Olá @westsouthnight , talvez este script possa ajudá-lo: https://gist.github.com/cirocosta/fb6b90cb7651ff21eda4838a73e3710b .
Ele não usa -u para realizar a autenticação básica ao recuperar o token, mas testei com um repositório privado e adicionando -u a get_token() { realmente funciona: com um registro privado pode recuperar o registro somente se -u for usado.

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

Me avise se isso ajudar 👍

Deixe-me encerrar este problema, já que o rastreador de problemas do GitHub não se destina realmente a ser um fórum de suporte geral,
mas para relatar bugs e solicitações de recursos. Para outro tipo de pergunta, considere usar uma das seguintes;

Esta questão também não está diretamente relacionada ao código-fonte neste repositório, mas ao Docker Hub (e autenticação usada lá). Mas fique à vontade para continuar a conversa 👍

Esta página foi útil?
0 / 5 - 0 avaliações