Cmd: docker girişini kullanarak cmd satırında bir docker kayıt defterinde oturum açıp açmadığımdan emin değilim. Basmaya çalışmadan oturum açıp açmadığınızı nasıl test edebilir veya görebilirsiniz?
Cmd: docker girişini kullanarak cmd satırında bir docker kayıt defterinde oturum açıp açmadığımdan emin değilim. Basmaya çalışmadan oturum açıp açmadığınızı nasıl test edebilir veya görebilirsiniz?
Yanıtlar:
2020'yi Düzenle
Belirtildiği yerde ( kapalı ) github konusuna geri dönersek , gerçek bir oturum veya durum yoktur;
docker oturum açma aslında herhangi bir kalıcı oturum oluşturmuyor, yalnızca kullanıcının kimlik bilgilerini diskte depoluyor, böylece kimlik doğrulama gerektiğinde oturum açmak için okuyabilir
Başkalarının da belirttiği gibi, başarılı bir şekilde oturum açtıktan sonra dosyaya bir auths
giriş / düğüm eklenir ~/.docker/config.json
(bu aynı zamanda özel kayıtlar için de geçerlidir ):
{
"auths": {
"https://index.docker.io/v1/": {}
},
...
Oturumu kapatırken, bu giriş daha sonra kaldırılır:
$ docker logout
Removing login credentials for https://index.docker.io/v1/
Daha config.json
sonra docker içeriği :
{
"auths": {},
...
Bu dosya, oturum açma durumunuzu kontrol etmek için komut dosyanız veya kodunuzla ayrıştırılabilir.
Docker'a giriş yapabilirsiniz 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:
Zaten giriş yaptıysanız, komut istemi şöyle görünecektir:
$ 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"
Sorunun orijinal açıklaması için şu soruyu~/.docker/config.json
kontrol edin : Özel bir docker kayıt defterinde oturum açıp açmadığımı nasıl anlarım
~/.docker/config.json
.
docker info
index.docker.io için bile güvenilir olmadığı anlaşılıyor . Şu anda giriş yaptınız ve sadece Registry
girişi görün, hayır Username
.
Bu kontrol için aşağıdaki iki yoldan birini kullanıyorum:
"Private.registry.com" adresinde oturum açmanız durumunda, aşağıdakine benzer bir giriş göreceksiniz ~/.docker/config.json
:
"auths": {
"private.registry.com": {
"auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
}
}
Private.registry.com ile halihazırda aktif bir oturumunuz olup olmadığını görmeye çalışıyorsanız, tekrar oturum açmayı deneyin:
bash$ docker login private.registry.com
Username (logged-in-user):
Yukarıdaki gibi bir çıktı alırsanız, logged-in-user
zaten aktif bir oturumunuz olduğu anlamına gelir private.registry.com
. Bunun yerine sadece kullanıcı adı istenirse, bu aktif oturum olmadığını gösterir.
Oturum açtığınız kullanıcı adını ve kullanılan kayıt defterini görmek için aşağıdaki komutu uygulayabilirsiniz:
docker system info | grep -E 'Username|Registry'
Buradaki cevaplar şu ana kadar pek kullanışlı değil:
docker info
artık bu bilgiyi sağlamıyordocker logout
önemli bir rahatsızlıktır - kimlik bilgilerini zaten bilmiyorsanız ve kolayca yeniden giriş yapamıyorsanızdocker login
yanıt oldukça güvenilmez görünüyor ve program tarafından ayrıştırılması o kadar kolay değilBenim için işe yarayan çözümüm @ noobuntu'nun yorumuna dayanıyor : Çekmek istediğim görüntüyü zaten biliyorsam, ancak kullanıcının zaten oturum açmış olup olmadığından emin değilim, bunu yapabileceğimi anladım:
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)
Özel kayıtlar için hiçbir şey gösterilmez docker info
. Ancak, logout komutu size oturum açıp açmadığınızı söyleyecektir:
$ docker logout private.example.com
Not logged in to private.example.com
(Yine de bu sizi tekrar giriş yapmaya zorlayacaktır.)
Docker cli kimlik bilgileri şeması şaşırtıcı derecede karmaşık değildir, sadece bir göz atın:
cat ~/.docker/config.json
{
"auths": {
"dockerregistry.myregistry.com": {},
"https://index.docker.io/v1/": {}
Bu, Windows'ta mevcuttur (kullanım Get-Content ~\.docker\config.json
) ve ayrıca kullanıcı adını da listeleyen kimlik bilgisi aracının etrafından dolaşabilirsiniz ... ve bence şifreyi bile alabilirsiniz
. "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>
bu da get
şifrenizi alabileceğiniz anlamına geliyor
cat
, Powershell'de takma adı kullanıyordum ... ikisini de içerecek şekilde güncellendi
En azından "Windows için Docker" da, UI üzerinden docker hub'da oturum açıp açmadığınızı görebilirsiniz. Windows bildirim alanındaki docker simgesine sağ tıklayın:
Basit bir true/false
değer istiyorsanız , istediğiniz docker.json
yere yönlendirebilirsiniz 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
jq
uygun bir çıkış kodunu döndürür ve daha sonra dize karşılaştırmaları yapmak gerekmez:is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
Aşağıdaki gibi bir komut kullanın:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
Windows'ta şu dosyaya bakarak oturum açma "yetkilerini" (yetkilendirmeleri) inceleyebilirsiniz: [USER_HOME_DIR] .docker \ config.json
Örnek: c: \ USERS \ YOUR_USERANME.docker \ config.json
Windows kimlik bilgileri için böyle bir şeye benzeyecek
{
"auths": {
"HOST_NAME_HERE": {},
"https://index.docker.io/v1/": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.0 (windows)"
},
"credsStore": "wincred",
"stackOrchestrator": "swarm"
}
@Christian'ın belirttiği gibi, en iyisi önce işlemi denemek ve ardından sadece gerekirse oturum açmaktır. Sorun şu ki, "gerekirse" sağlam bir şekilde yapmak o kadar açık değil. Bir yaklaşım, docker işleminin stderrini bilinen bazı dizelerle (deneme yanılma yoluyla) karşılaştırmaktır. Örneğin,
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!