Erfahren Sie, ob Docker bereits bei einem Docker-Registrierungsserver angemeldet ist
116
Ich bin nicht sicher, ob ich mich bereits mit cmd: docker login bei einer Docker-Registrierung in cmd-Zeile angemeldet habe. Wie können Sie testen oder sehen, ob Sie angemeldet sind oder nicht, ohne zu pushen?
Nicht sicher, ob ich Ihre Frage verstehe? Möchten Sie wissen, ob Sie an einem Terminal angemeldet sind? Warum nicht den Befehl % docker images im Terminal ausführen und prüfen, ob Ihre Bilder angezeigt werden?
Noobuntu
1
Ich möchte wissen, ob ich bei der Dockerhub-Registrierung im Terminal angemeldet bin. Ich dachte, die Bilder sind lokal, daher werden nur die lokalen Bilder angezeigt, nicht die Dockerhub-Bilder.
Ville Miekk-oja
1
Ich glaube, sobald Sie bei Docker angemeldet sind, sind Sie mit Ihrer Dockerhub-Registrierung verbunden. Ich glaube nicht, dass es einen separaten Login gibt
noobuntu
Antworten:
63
Bearbeiten Sie 2020
Unter Bezugnahme auf das ( geschlossene ) Github- Problem, auf das hingewiesen wird, gibt es keine tatsächliche Sitzung oder keinen tatsächlichen Status.
Die Docker-Anmeldung erstellt eigentlich keine dauerhafte Sitzung, sondern speichert nur die Anmeldeinformationen des Benutzers auf der Festplatte, damit er sie bei Anmeldung lesen kann, um sich anzumelden
Wie andere bereits erwähnt haben, authswird der ~/.docker/config.jsonDatei ein Eintrag / Knoten hinzugefügt (dies funktioniert auch für private Registrierungen), nachdem Sie sich erfolgreich angemeldet haben:
$ docker logout
Removing login credentials for https://index.docker.io/v1/
Inhalt des Dockers config.jsonnach:
{
"auths": {},
...
Diese Datei kann von Ihrem Skript oder Code analysiert werden, um Ihren Anmeldestatus zu überprüfen.
Alternative Methode (erneutes Anmelden)
Sie können sich bei Docker mit anmelden 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:
Wenn Sie bereits angemeldet sind, sieht die Eingabeaufforderung folgendermaßen aus:
$ 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"
Wenn Sie eine Ausgabe wie oben erhalten, bedeutet dies, dass logged-in-userbereits eine aktive Sitzung mit stattgefunden hat private.registry.com. Wenn Sie stattdessen nur zur Eingabe des Benutzernamens aufgefordert werden, bedeutet dies, dass keine Sitzung aktiv ist.
docker info bietet diese Informationen nicht mehr an
docker logout Dies ist eine große Unannehmlichkeit - es sei denn, Sie kennen die Anmeldeinformationen bereits und können sich problemlos erneut anmelden
docker login Die Antwort scheint ziemlich unzuverlässig und vom Programm nicht so einfach zu analysieren
Meine Lösung, die für mich funktioniert hat, baut auf @ noobuntus Kommentar auf : Ich dachte, wenn ich das Bild, das ich ziehen möchte, bereits kenne, aber nicht sicher bin, ob der Benutzer bereits angemeldet ist, kann ich Folgendes tun:
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)
Dies ist bei weitem die beste Strategie: Versuchen Sie es einfach mit einem Pull. Wenn dies fehlschlägt, ist es nicht angemeldet (der Rest der Logik hängt von jedem Anwendungsfall ab, aber der erste Versuch ist universell anwendbar).
Oliver
2
Auf github.com/moby/moby/issues/15466 hat jedoch jemand darauf hingewiesen, dass es viele Gründe für einen Fehler gibt, nicht nur ein Anmeldeproblem, aber der Docker-Exit-Status erlaubt es nicht, den Grund für einen Fehler zu unterscheiden. Es ist immer noch besser als die anderen Lösungen, aber eine vollständige Lösung würde einen Patch zum Andocken erfordern.
Oliver
5
Bei privaten Registern wird nichts angezeigt docker info. Der Befehl zum Abmelden teilt Ihnen jedoch mit, ob Sie angemeldet waren:
$ docker logout private.example.com
Not logged in to private.example.com
(Dies zwingt Sie jedoch dazu, sich erneut anzumelden.)
Dies gibt es unter Windows (Verwendung Get-Content ~\.docker\config.json) und Sie können auch das Anmeldeinformationstool durchsuchen, in dem auch der Benutzername aufgeführt ist ... und ich denke, Sie können sogar das Kennwort abrufen
. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list
Unter Windows sehen Sie nur den Benutzernamen, das Passwort wird im Anmeldeinformations-Manager (Systemsteuerung) gespeichert
Thorbjørn Ravn Andersen
Ich denke, ich werde die Überraschung verderben ... docker-credential-wincred.exe <store|get|erase|list|version>was bedeutet, dass Sie getIhr Passwort
KCD
Dieser Befehl cat sollte Linux-Pfadtrennzeichen verwenden: cat ~ / .docker / config.json. Für manche mag dies ein Trottel sein, aber andere Leser kopieren / fügen es einfach ein und probieren es aus und stellen nicht ohne weiteres fest, dass der Fehler "Keine solche Datei oder kein solches Verzeichnis" darauf zurückzuführen ist. :-)
Charlie Arehart
@charliearehart Sie unterschätzen meine Faulheit, ich habe den catAlias in Powershell verwendet ... aktualisiert, um beide
einzuschließen
@ KCD, ah. :-) Danke fürs klarstellen.
Charlie Arehart
4
Gerade überprüft, heute sieht es so aus:
$ docker login
Authenticating with existing credentials...
Login Succeeded
HINWEIS: Dies ist unter einem MacOS mit der neuesten Version von Docker CE, Docker-Anmeldeinformations-Helfer - beide mit Homebrew installiert.
Zumindest in "Docker für Windows" können Sie sehen, ob Sie über die Benutzeroberfläche beim Docker-Hub angemeldet sind. Klicken Sie einfach mit der rechten Maustaste auf das Docker-Symbol im Windows-Benachrichtigungsbereich:
Sie können jqeinen korrekten Exit-Code zurückgeben und müssen dann keine Zeichenfolgenvergleiche durchführen:is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
Guss
Nett! Danke dir!
mcw
1
Verwenden Sie den folgenden Befehl:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
Wie von @Christian hervorgehoben, versuchen Sie am besten zuerst den Betrieb und melden Sie sich dann nur bei Bedarf an. Das Problem ist, dass "wenn nötig" nicht so offensichtlich ist, um robust zu machen. Ein Ansatz besteht darin, den stderr der Docker-Operation mit einigen bekannten Zeichenfolgen zu vergleichen (durch Ausprobieren). Beispielsweise,
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!
Antworten:
Bearbeiten Sie 2020
Unter Bezugnahme auf das ( geschlossene ) Github- Problem, auf das hingewiesen wird, gibt es keine tatsächliche Sitzung oder keinen tatsächlichen Status.
Wie andere bereits erwähnt haben,
auths
wird der~/.docker/config.json
Datei ein Eintrag / Knoten hinzugefügt (dies funktioniert auch für private Registrierungen), nachdem Sie sich erfolgreich angemeldet haben:Beim Abmelden wird dieser Eintrag dann entfernt:
Inhalt des Dockers
config.json
nach:Diese Datei kann von Ihrem Skript oder Code analysiert werden, um Ihren Anmeldestatus zu überprüfen.
Alternative Methode (erneutes Anmelden)
Sie können sich bei Docker mit anmelden
docker login <repository>
Wenn Sie bereits angemeldet sind, sieht die Eingabeaufforderung folgendermaßen aus:
~/.docker/config.json
Überprüfen Sie die ursprüngliche Erklärung für die Frage: Wie kann ich feststellen, ob ich in einer privaten Docker-Registrierung angemeldet bin?quelle
~/.docker/config.json
.docker info
ist anscheinend sogar für index.docker.io unzuverlässig . Derzeit in Ordnung eingeloggt und nur denRegistry
Eintrag sehen, NrUsername
.Ich benutze eine der folgenden zwei Möglichkeiten für diese Prüfung:
1: Datei config.json anzeigen:
Wenn Sie bei "private.registry.com" angemeldet sind, wird ein Eintrag für den folgenden Eintrag angezeigt
~/.docker/config.json
:2: Versuchen Sie erneut, sich anzumelden:
Wenn Sie versuchen festzustellen, ob Sie bereits eine aktive Sitzung mit private.registry.com haben, versuchen Sie erneut, sich anzumelden:
Wenn Sie eine Ausgabe wie oben erhalten, bedeutet dies, dass
logged-in-user
bereits eine aktive Sitzung mit stattgefunden hatprivate.registry.com
. Wenn Sie stattdessen nur zur Eingabe des Benutzernamens aufgefordert werden, bedeutet dies, dass keine Sitzung aktiv ist.quelle
Mit dem folgenden Befehl können Sie den Benutzernamen, mit dem Sie angemeldet sind, und die verwendete Registrierung anzeigen:
quelle
Die Antworten hier sind bisher nicht so nützlich:
docker info
bietet diese Informationen nicht mehr andocker logout
Dies ist eine große Unannehmlichkeit - es sei denn, Sie kennen die Anmeldeinformationen bereits und können sich problemlos erneut anmeldendocker login
Die Antwort scheint ziemlich unzuverlässig und vom Programm nicht so einfach zu analysierenMeine Lösung, die für mich funktioniert hat, baut auf @ noobuntus Kommentar auf : Ich dachte, wenn ich das Bild, das ich ziehen möchte, bereits kenne, aber nicht sicher bin, ob der Benutzer bereits angemeldet ist, kann ich Folgendes tun:
quelle
Bei privaten Registern wird nichts angezeigt
docker info
. Der Befehl zum Abmelden teilt Ihnen jedoch mit, ob Sie angemeldet waren:(Dies zwingt Sie jedoch dazu, sich erneut anzumelden.)
quelle
Das Docker-Cli-Berechtigungsschema ist nicht überraschend unkompliziert. Schauen Sie sich das an:
cat ~/.docker/config.json
Dies gibt es unter Windows (Verwendung
Get-Content ~\.docker\config.json
) und Sie können auch das Anmeldeinformationstool durchsuchen, in dem auch der Benutzername aufgeführt ist ... und ich denke, Sie können sogar das Kennwort abrufen. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list
quelle
docker-credential-wincred.exe <store|get|erase|list|version>
was bedeutet, dass Sieget
Ihr Passwortcat
Alias in Powershell verwendet ... aktualisiert, um beideGerade überprüft, heute sieht es so aus:
HINWEIS: Dies ist unter einem MacOS mit der neuesten Version von Docker CE, Docker-Anmeldeinformations-Helfer - beide mit Homebrew installiert.
quelle
Zumindest in "Docker für Windows" können Sie sehen, ob Sie über die Benutzeroberfläche beim Docker-Hub angemeldet sind. Klicken Sie einfach mit der rechten Maustaste auf das Docker-Symbol im Windows-Benachrichtigungsbereich:
quelle
Wenn Sie einen einfachen
true/false
Wert wünschen , können Sie Ihrendocker.json
an weiterleitenjq
.quelle
jq
einen korrekten Exit-Code zurückgeben und müssen dann keine Zeichenfolgenvergleiche durchführen:is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
Verwenden Sie den folgenden Befehl:
quelle
Unter Windows können Sie die Anmeldeberechtigungen (Auths) anhand der folgenden Datei überprüfen : [USER_HOME_DIR] .docker \ config.json
Beispiel: c: \ USERS \ YOUR_USERANME.docker \ config.json
Bei Windows-Anmeldeinformationen sieht es ungefähr so aus
quelle
Wie von @Christian hervorgehoben, versuchen Sie am besten zuerst den Betrieb und melden Sie sich dann nur bei Bedarf an. Das Problem ist, dass "wenn nötig" nicht so offensichtlich ist, um robust zu machen. Ein Ansatz besteht darin, den stderr der Docker-Operation mit einigen bekannten Zeichenfolgen zu vergleichen (durch Ausprobieren). Beispielsweise,
quelle