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:
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.
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 👍