Moby: Tidak dapat memahami cara mendapatkan image_id atau info lainnya dari repositori pribadi

Dibuat pada 15 Mar 2017  ·  3Komentar  ·  Sumber: moby/moby


INFORMASI LAPORAN BUG

Deskripsi

Kami menggunakan repositori pribadi buruh pelabuhan di hub buruh pelabuhan, ketika memiliki lebih dari 10 gambar.

Kami ingin mendapatkan info gambar buruh pelabuhan dari hub buruh pelabuhan untuk dapat membandingkan gambar yang dibuat dan yang disajikan saat ini di hub buruh pelabuhan.

Saya mencoba menggunakan curl untuk mendapatkan token auth dengan menjalankan perintah yang saya temukan di google.

Sepertinya:

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

Saya mencoba untuk mendapatkan token dengan cara berikut:

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)

Dalam semua kasus saya mendapatkan beberapa token, mencoba untuk mendapatkan manifes dari repositori pribadi saya, dengan cara berikut:

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

Selalu dapatkan

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

Bagaimana cara memperbaiki semua yang diperlukan untuk saya info dari hub docker?

Ketika saya mencoba untuk mendapatkan tag melalui

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

Saya tidak punya masalah.

Juga, saya tidak dapat menemukan cara kerja untuk melakukan apa yang saya inginkan.

Langkah-langkah untuk mereproduksi masalah:

  1. Miliki gambar pribadi di hub.docker.com
  2. Dapatkan token Otentikasi
  3. Coba dapatkan info manifes atau info gambar lainnya dari hub.docker.com

Jelaskan hasil yang Anda terima:

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

Jelaskan hasil yang Anda harapkan:

Json yang berisi informasi saat ini disajikan pada gambar hub buruh pelabuhan.

aredistribution kinquestion

Semua 3 komentar

Diskusi di https://github.com/docker/docker/issues/29257#issuecomment -266121974 mungkin terkait di sini

Hai @westsouthnight , mungkin skrip ini dapat membantu Anda: https://Gist.github.com/cirocosta/fb6b90cb7651ff21eda4838a73e3710b .
Itu tidak menggunakan -u untuk melakukan otentikasi dasar ketika mengambil token tetapi saya menguji dengan repositori pribadi dan menambahkan -u ke get_token() { memang berfungsi: dengan registri pribadi saya dapat mengambil registri hanya jika -u digunakan.

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

Beri tahu saya jika itu membantu 👍

Biarkan saya menutup masalah ini, karena pelacak masalah GitHub tidak benar-benar dimaksudkan sebagai forum dukungan umum,
tetapi untuk melaporkan bug dan permintaan fitur. Untuk jenis pertanyaan lain, pertimbangkan untuk menggunakan salah satu dari;

Pertanyaan ini juga tidak terkait langsung dengan kode sumber di repositori ini, tetapi ke Docker Hub (dan otentikasi digunakan di sana). Tapi jangan ragu untuk melanjutkan percakapan 👍

Apakah halaman ini membantu?
0 / 5 - 0 peringkat