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?
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?
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.
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, 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:
{
"auths": {
"https://index.docker.io/v1/": {}
},
...
Beim Abmelden wird dieser Eintrag dann entfernt:
$ docker logout
Removing login credentials for https://index.docker.io/v1/
Inhalt des Dockers config.json
nach:
{
"auths": {},
...
Diese Datei kann von Ihrem Skript oder Code analysiert werden, um Ihren Anmeldestatus zu überprüfen.
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"
~/.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?
~/.docker/config.json
.
docker info
ist anscheinend sogar für index.docker.io unzuverlässig . Derzeit in Ordnung eingeloggt und nur den Registry
Eintrag sehen, Nr Username
.
Ich benutze eine der folgenden zwei Möglichkeiten für diese Prüfung:
Wenn Sie bei "private.registry.com" angemeldet sind, wird ein Eintrag für den folgenden Eintrag angezeigt ~/.docker/config.json
:
"auths": {
"private.registry.com": {
"auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
}
}
Wenn Sie versuchen festzustellen, ob Sie bereits eine aktive Sitzung mit private.registry.com haben, versuchen Sie erneut, sich anzumelden:
bash$ docker login private.registry.com
Username (logged-in-user):
Wenn Sie eine Ausgabe wie oben erhalten, bedeutet dies, dass logged-in-user
bereits 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.
Mit dem folgenden Befehl können Sie den Benutzernamen, mit dem Sie angemeldet sind, und die verwendete Registrierung anzeigen:
docker system info | grep -E 'Username|Registry'
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:
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)
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.)
Das Docker-Cli-Berechtigungsschema ist nicht überraschend unkompliziert. Schauen Sie sich das an:
cat ~/.docker/config.json
{
"auths": {
"dockerregistry.myregistry.com": {},
"https://index.docker.io/v1/": {}
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
{"https://index.docker.io/v1/":"kcd"}
docker-credential-wincred.exe <store|get|erase|list|version>
was bedeutet, dass Sie get
Ihr Passwort
cat
Alias in Powershell verwendet ... aktualisiert, um beide
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:
Wenn Sie einen einfachen true/false
Wert wünschen , können Sie Ihren docker.json
an weiterleiten 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
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:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
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
{
"auths": {
"HOST_NAME_HERE": {},
"https://index.docker.io/v1/": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.0 (windows)"
},
"credsStore": "wincred",
"stackOrchestrator": "swarm"
}
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!