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