Saya tidak yakin apakah saya sudah masuk ke registri buruh pelabuhan di baris cmd dengan menggunakan cmd: login docker. Bagaimana Anda bisa menguji atau melihat apakah Anda masuk atau tidak, tanpa mencoba mendorong?
Saya tidak yakin apakah saya sudah masuk ke registri buruh pelabuhan di baris cmd dengan menggunakan cmd: login docker. Bagaimana Anda bisa menguji atau melihat apakah Anda masuk atau tidak, tanpa mencoba mendorong?
Jawaban:
Edit 2020
Merujuk kembali ke masalah github ( tertutup ) , yang disebutkan, tidak ada sesi atau status aktual;
docker login sebenarnya tidak membuat sesi persisten apa pun, itu hanya menyimpan kredensial pengguna pada disk sehingga ketika otentikasi diperlukan, ia dapat membacanya untuk masuk
Seperti yang ditunjukkan orang lain, authsentri / node ditambahkan ke ~/.docker/config.jsonfile (ini juga berfungsi untuk registri pribadi ) setelah Anda berhasil masuk:
{
"auths": {
"https://index.docker.io/v1/": {}
},
...
Saat keluar, entri ini kemudian dihapus:
$ docker logout
Removing login credentials for https://index.docker.io/v1/
Isi buruh pelabuhan config.jsonsetelah:
{
"auths": {},
...
File ini dapat diurai oleh skrip atau kode Anda untuk memeriksa status login Anda.
Anda bisa login ke buruh pelabuhan dengan docker login <repository>
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If
you don't have a Docker ID, head over to https://hub.docker.com to
create one.
Username:
Jika Anda sudah masuk, prompt akan terlihat seperti ini:
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If
you don't have a Docker ID, head over to https://hub.docker.com to
create one.
Username (myusername): # <-- "myusername"
Untuk penjelasan asli untuk ~/.docker/config.json, periksa pertanyaan: bagaimana cara mengetahui apakah saya masuk ke registri buruh pelabuhan pribadi
~/.docker/config.json.
docker infotampaknya tidak dapat diandalkan bahkan untuk index.docker.io . Saat ini masuk baik-baik saja dan hanya melihat Registryentri, tidak Username.
Saya menggunakan salah satu dari dua cara berikut untuk pemeriksaan ini:
Jika Anda masuk ke "private.registry.com", Anda akan melihat entri yang sama seperti berikut di ~/.docker/config.json:
"auths": {
"private.registry.com": {
"auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
}
}
Jika Anda mencoba untuk melihat apakah Anda sudah memiliki sesi aktif dengan private.registry.com, coba masuk lagi:
bash$ docker login private.registry.com
Username (logged-in-user):
Jika mendapatkan output seperti di atas, artinya logged-in-usersudah ada sesi aktif dengan private.registry.com. Jika Anda hanya diminta untuk nama pengguna, itu akan menunjukkan bahwa tidak ada sesi aktif.
Anda dapat melakukan perintah berikut untuk melihat nama pengguna yang Anda gunakan untuk masuk dan registri yang digunakan:
docker system info | grep -E 'Username|Registry'
Jawaban di sini sejauh ini tidak begitu berguna:
docker info tidak lagi memberikan info inidocker logout merupakan ketidaknyamanan utama - kecuali Anda sudah mengetahui kredensial dan dapat masuk ulang dengan mudahdocker login respons tampaknya tidak dapat diandalkan dan tidak begitu mudah diurai oleh programSolusi saya yang berhasil untuk saya didasarkan pada komentar @ noobuntu : Saya pikir jika saya sudah mengetahui gambar yang ingin saya tarik, tetapi saya tidak yakin apakah pengguna sudah masuk, saya bisa melakukan ini:
try pulling target image
-> on failure:
try logging in
-> on failure: throw CannotLogInException
-> on success:
try pulling target image
-> on failure: throw CannotPullImageException
-> on success: (continue)
-> on success: (continue)
Untuk registri pribadi, tidak ada yang ditampilkan di docker info. Namun, perintah logout akan memberi tahu Anda jika Anda masuk:
$ docker logout private.example.com
Not logged in to private.example.com
(Meskipun ini akan memaksa Anda untuk masuk lagi.)
Skema kredensial CLI buruh pelabuhan ternyata tidak rumit, lihat saja:
cat ~/.docker/config.json
{
"auths": {
"dockerregistry.myregistry.com": {},
"https://index.docker.io/v1/": {}
Ini ada di Windows (gunakan Get-Content ~\.docker\config.json) dan Anda juga dapat melihat-lihat alat kredensial yang juga mencantumkan nama pengguna ... dan saya pikir Anda bahkan dapat mengambil kata sandi
. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list
{"https://index.docker.io/v1/":"kcd"}
docker-credential-wincred.exe <store|get|erase|list|version>yang berarti Anda dapat getkata sandi Anda
catalias di Powershell ... diperbarui untuk menyertakan keduanya
Setidaknya di "Docker untuk Windows" Anda dapat melihat apakah Anda masuk ke hub buruh pelabuhan melalui UI. Cukup klik kanan ikon buruh pelabuhan di area pemberitahuan windows:

Jika Anda menginginkan true/falsenilai yang sederhana , Anda dapat menyalurkan docker.jsonke jq.
is_logged_in() {
cat ~/.docker/config.json | jq -r --arg url "${REPOSITORY_URL}" '.auths | has($url)'
}
if [[ "$(is_logged_in)" == "false" ]]; then
# do stuff, log in
fi
jqmengembalikan kode keluar yang benar dan kemudian Anda tidak perlu melakukan perbandingan string:is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
Gunakan perintah seperti di bawah ini:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
Di windows Anda dapat memeriksa login "otorisasi" (auth) dengan melihat file ini: [USER_HOME_DIR] .docker \ config.json
Contoh: c: \ USERS \ YOUR_USERANME.docker \ config.json
Ini akan terlihat seperti ini untuk kredensial windows
{
"auths": {
"HOST_NAME_HERE": {},
"https://index.docker.io/v1/": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.0 (windows)"
},
"credsStore": "wincred",
"stackOrchestrator": "swarm"
}
Seperti yang ditunjukkan oleh @Christian, yang terbaik adalah mencoba operasi terlebih dahulu lalu login hanya jika perlu. Masalahnya adalah bahwa "jika perlu" tidak begitu jelas untuk dilakukan dengan kuat. Salah satu pendekatannya adalah dengan membandingkan stderr dari operasi buruh pelabuhan dengan beberapa string yang dikenal (dengan trial and error). Sebagai contoh,
try "docker OPERATION"
if it failed:
capture the stderr of "docker OPERATION"
if it ends with "no basic auth credentials":
try docker login
else if it ends with "not found":
fatal error: image name/tag probably incorrect
else if it ends with <other stuff you care to trap>:
...
else:
fatal error: unknown cause
try docker OPERATION again
if this fails: you're SOL!