Nie jestem pewien, czy już zalogowałem się do rejestru Dockera w linii cmd przy użyciu polecenia cmd: docker login. Jak możesz przetestować lub sprawdzić, czy jesteś zalogowany, czy nie, bez próby naciskania?
Nie jestem pewien, czy już zalogowałem się do rejestru Dockera w linii cmd przy użyciu polecenia cmd: docker login. Jak możesz przetestować lub sprawdzić, czy jesteś zalogowany, czy nie, bez próby naciskania?
Odpowiedzi:
Edytuj 2020
Wracając do ( zamkniętego ) problemu na githubie , gdzie wskazano, że nie ma aktualnej sesji ani stanu;
Docker login w rzeczywistości nie tworzy żadnej trwałej sesji, a jedynie przechowuje dane uwierzytelniające użytkownika na dysku, aby gdy wymagane jest uwierzytelnienie, mógł je odczytać, aby się zalogować
Jak zauważyli inni, authswpis / węzeł jest dodawany do ~/.docker/config.jsonpliku (działa to również w przypadku prywatnych rejestrów) po pomyślnym zalogowaniu:
{
"auths": {
"https://index.docker.io/v1/": {}
},
...
Podczas wylogowywania ten wpis jest następnie usuwany:
$ docker logout
Removing login credentials for https://index.docker.io/v1/
Zawartość dockera config.jsonpo:
{
"auths": {},
...
Ten plik może zostać przeanalizowany przez skrypt lub kod, aby sprawdzić stan logowania.
Możesz zalogować się do dockera z 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:
Jeśli jesteś już zalogowany, monit będzie wyglądał następująco:
$ 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"
Aby uzyskać oryginalne wyjaśnienie ~/.docker/config.json, sprawdź pytanie: jak mogę sprawdzić, czy jestem zalogowany do prywatnego rejestru docker
~/.docker/config.json.
docker infojest najwyraźniej zawodny nawet dla index.docker.io . Obecnie zalogowany w porządku i widzę tylko Registrywpis, nie Username.
Do tego sprawdzenia używam jednego z następujących dwóch sposobów:
Jeśli jesteś zalogowany na „private.registry.com”, zobaczysz wpis taki sam jak następujący w ~/.docker/config.json:
"auths": {
"private.registry.com": {
"auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
}
}
Jeśli próbujesz sprawdzić, czy masz już aktywną sesję z private.registry.com, spróbuj zalogować się ponownie:
bash$ docker login private.registry.com
Username (logged-in-user):
Jeśli otrzymasz wynik podobny do powyższego, oznacza to, że masz logged-in-userjuż aktywną sesję z private.registry.com. Jeśli zamiast tego zostanie wyświetlony monit o podanie nazwy użytkownika, oznaczałoby to, że nie ma aktywnej sesji.
Możesz wykonać następujące polecenie, aby zobaczyć nazwę użytkownika, z którym jesteś zalogowany, i używany rejestr:
docker system info | grep -E 'Username|Registry'
Dotychczasowe odpowiedzi nie są tak przydatne:
docker info nie dostarcza już tych informacjidocker logout to poważna niedogodność - chyba że znasz już dane uwierzytelniające i możesz łatwo zalogować się ponowniedocker login odpowiedź wydaje się dość zawodna i niełatwa do przeanalizowania przez programMoje rozwiązanie, które dla mnie zadziałało, opiera się na komentarzu @ noobuntu : pomyślałem, że skoro już znam obraz, który chcę wyciągnąć, ale nie jestem pewien, czy użytkownik jest już zalogowany, mogę to zrobić:
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)
W przypadku rejestrów prywatnych nic nie jest wyświetlane docker info. Jednak polecenie wylogowania poinformuje Cię, czy byłeś zalogowany:
$ docker logout private.example.com
Not logged in to private.example.com
(Chociaż to zmusi Cię do ponownego zalogowania).
Schemat poświadczeń docker cli jest zaskakująco nieskomplikowany, wystarczy spojrzeć:
cat ~/.docker/config.json
{
"auths": {
"dockerregistry.myregistry.com": {},
"https://index.docker.io/v1/": {}
Istnieje w systemie Windows (użyj Get-Content ~\.docker\config.json) i możesz także przeglądać narzędzie poświadczające, które również wyświetla nazwę użytkownika ... i myślę, że możesz nawet odzyskać hasło
. "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>co oznacza, że możesz getpodać swoje hasło
cataliasu w Powershell ... zaktualizowano, aby obejmował oba
Przynajmniej w „Docker for Windows” możesz sprawdzić, czy jesteś zalogowany do docker hub przez interfejs użytkownika. Wystarczy kliknąć prawym przyciskiem myszy ikonę Dockera w obszarze powiadomień systemu Windows:

Jeśli chcesz mieć prostą true/falsewartość, możesz przesłać ją docker.jsondo 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
jqzwrócić poprawny kod wyjścia, a wtedy nie musisz robić porównań ciągów:is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
Użyj polecenia jak poniżej:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
W systemie Windows możesz sprawdzić „autoryzacje” logowania (auths), przeglądając ten plik: [USER_HOME_DIR] .docker \ config.json
Przykład: c: \ USERS \ YOUR_USERANME.docker \ config.json
W przypadku poświadczeń systemu Windows będzie to wyglądać mniej więcej tak
{
"auths": {
"HOST_NAME_HERE": {},
"https://index.docker.io/v1/": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.0 (windows)"
},
"credsStore": "wincred",
"stackOrchestrator": "swarm"
}
Jak wskazał @Christian, najlepiej najpierw wypróbować operację, a następnie zalogować się tylko w razie potrzeby. Problem polega na tym, że solidne wykonanie zadania „w razie potrzeby” nie jest takie oczywiste. Jednym podejściem jest porównanie standardowego błędu operacji dockera z niektórymi znanymi ciągami znaków (metodą prób i błędów). Na przykład,
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!