Bagaimana cara mengetahui apakah buruh pelabuhan sudah masuk ke server registri buruh pelabuhan
116
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?
Tidak yakin saya mengerti pertanyaan Anda? apakah Anda ingin tahu apakah Anda masuk di terminal? mengapa tidak menjalankan perintah % docker images di terminal dan lihat apakah gambar Anda muncul?
noobuntu
1
Saya ingin tahu apakah saya login ke registry dockerhub di terminal. Saya pikir gambarnya lokal, jadi itu hanya akan menampilkan gambar lokal, bukan gambar dockerhub.
Ville Miekk-oja
1
Saya yakin setelah Anda masuk ke buruh pelabuhan, Anda terhubung ke registri dockerhub Anda. Saya rasa tidak ada login terpisah
noobuntu
Jawaban:
64
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:
$ 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.
Metode alternatif (login ulang)
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"
Tautan terakhir berbicara tentang memeriksa konten ~/.docker/config.json.
dusan
3
docker infotampaknya tidak dapat diandalkan bahkan untuk index.docker.io . Saat ini masuk baik-baik saja dan hanya melihat Registryentri, tidak Username.
Famousgarkin
3
info buruh pelabuhan tidak menampilkan nama pengguna lagi. Saya menggunakan Windows, dengan buruh pelabuhan versi 18.05.0-ce.
Giovanni Bassi
3
Bagaimana jika skrip perlu diperiksa?
Teekin
Ini hanya bekerja untuk hub buruh pelabuhan utama, saya kira. Authing ke repo lain, Anda harus memeriksa file config.json Anda.
duane
43
Saya menggunakan salah satu dari dua cara berikut untuk pemeriksaan ini:
1: Lihat file config.json:
Jika Anda masuk ke "private.registry.com", Anda akan melihat entri yang sama seperti berikut di ~/.docker/config.json:
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.
docker logout merupakan ketidaknyamanan utama - kecuali Anda sudah mengetahui kredensial dan dapat masuk ulang dengan mudah
docker login respons tampaknya tidak dapat diandalkan dan tidak begitu mudah diurai oleh program
Solusi 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)
Sejauh ini, ini adalah strategi terbaik: coba saja tarik, jika gagal maka ia tidak masuk (logika lainnya yang Anda miliki akan bergantung pada setiap kasus penggunaan, tetapi percobaan pertama dapat diterapkan secara universal).
Oliver
2
Namun seseorang menunjukkan di github.com/moby/moby/issues/15466 bahwa ada banyak alasan kegagalan, bukan hanya masalah login, namun status keluar buruh pelabuhan tidak memungkinkan untuk membedakan alasan kegagalan. Ini masih lebih baik daripada solusi lain, tetapi solusi lengkap akan membutuhkan patch untuk buruh pelabuhan.
Oliver
5
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.)
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
Di windows Anda hanya dapat melihat nama pengguna, kata sandi disimpan di pengelola kredensial (panel kontrol)
Thorbjørn Ravn Andersen
Saya kira saya akan merusak kejutan ... docker-credential-wincred.exe <store|get|erase|list|version>yang berarti Anda dapat getkata sandi Anda
KCD
Perintah cat itu harus menggunakan pemisah jalur linux: cat ~ / .docker / config.json. Hal ini mungkin tampak tidak menyenangkan bagi sebagian orang, tetapi pembaca lain mungkin hanya menyalin / menempelkannya dan mencobanya, dan tidak langsung menyadari bahwa kesalahan "tidak ada file atau direktori seperti itu" disebabkan oleh hal ini. :-)
Charlie Arehart
@charliearehart Anda meremehkan kemalasan saya, saya menggunakan catalias di Powershell ... diperbarui untuk menyertakan keduanya
KCD
@KCD, ah. :-) Terima kasih telah menjelaskan.
Charlie Arehart
4
Baru diperiksa, hari ini terlihat seperti ini:
$ docker login
Authenticating with existing credentials...
Login Succeeded
CATATAN: ini di macOS dengan versi terbaru Docker CE, docker-credential-helper - keduanya diinstal dengan homebrew.
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:
Anda dapat 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 ...
Guss
Bagus! Terima kasih!
mcw
1
Gunakan perintah seperti di bawah ini:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
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!
Jawaban:
Edit 2020
Merujuk kembali ke masalah github ( tertutup ) , yang disebutkan, tidak ada sesi atau status aktual;
Seperti yang ditunjukkan orang lain,
auths
entri / node ditambahkan ke~/.docker/config.json
file (ini juga berfungsi untuk registri pribadi ) setelah Anda berhasil masuk:Saat keluar, entri ini kemudian dihapus:
Isi buruh pelabuhan
config.json
setelah:File ini dapat diurai oleh skrip atau kode Anda untuk memeriksa status login Anda.
Metode alternatif (login ulang)
Anda bisa login ke buruh pelabuhan dengan
docker login <repository>
Jika Anda sudah masuk, prompt akan terlihat seperti ini:
Untuk penjelasan asli untuk
~/.docker/config.json
, periksa pertanyaan: bagaimana cara mengetahui apakah saya masuk ke registri buruh pelabuhan pribadisumber
~/.docker/config.json
.docker info
tampaknya tidak dapat diandalkan bahkan untuk index.docker.io . Saat ini masuk baik-baik saja dan hanya melihatRegistry
entri, tidakUsername
.Saya menggunakan salah satu dari dua cara berikut untuk pemeriksaan ini:
1: Lihat file config.json:
Jika Anda masuk ke "private.registry.com", Anda akan melihat entri yang sama seperti berikut di
~/.docker/config.json
:2: Coba login buruh pelabuhan sekali lagi:
Jika Anda mencoba untuk melihat apakah Anda sudah memiliki sesi aktif dengan private.registry.com, coba masuk lagi:
Jika mendapatkan output seperti di atas, artinya
logged-in-user
sudah ada sesi aktif denganprivate.registry.com
. Jika Anda hanya diminta untuk nama pengguna, itu akan menunjukkan bahwa tidak ada sesi aktif.sumber
Anda dapat melakukan perintah berikut untuk melihat nama pengguna yang Anda gunakan untuk masuk dan registri yang digunakan:
sumber
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:
sumber
Untuk registri pribadi, tidak ada yang ditampilkan di
docker info
. Namun, perintah logout akan memberi tahu Anda jika Anda masuk:(Meskipun ini akan memaksa Anda untuk masuk lagi.)
sumber
Skema kredensial CLI buruh pelabuhan ternyata tidak rumit, lihat saja:
cat ~/.docker/config.json
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
sumber
docker-credential-wincred.exe <store|get|erase|list|version>
yang berarti Anda dapatget
kata sandi Andacat
alias di Powershell ... diperbarui untuk menyertakan keduanyaBaru diperiksa, hari ini terlihat seperti ini:
CATATAN: ini di macOS dengan versi terbaru Docker CE, docker-credential-helper - keduanya diinstal dengan homebrew.
sumber
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:
sumber
Jika Anda menginginkan
true/false
nilai yang sederhana , Anda dapat menyalurkandocker.json
kejq
.sumber
jq
mengembalikan 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:
sumber
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
sumber
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,
sumber