
Gibt es eine Möglichkeit, eine ganze Maschine/einen ganzen Docker-Daemon in ein Register einzuloggen?
Alles, was ich über die Docker-Anmeldung und verschiedene proprietäre Anmeldeinformationshelfer sehe ~/.docker/config.json
, verwendet , d. h. es gilt pro Benutzer.
Ich befinde mich in einer Situation, in der ich Bilder aus einem privaten Register abrufen möchte. Mehrere Personen haben auf diesen Maschinen beliebigen Sudo-Zugriff und sollten Docker für unser Register verwenden können.
Da der Docker-Zugriff ohnehin als Root-Zugriff auf eine Maschine zu verstehen ist (d. h. die Benutzeranmeldeinformationen sind nicht gegenseitig sicher, wenn sie Docker ausführen können) und der Sudo-Zugriff dasselbe, aber direkt ist, möchte ich gleich zur Sache kommen und die ganze Maschine anmelden, ohne dass jeder Benutzer sich durch Reifen springen muss.
Ich könnte eine Datei bereitstellen, die jeder mit seinem verknüpfen könnte config.json
, mir wäre es aber lieber, wenn dies gleich ab der ersten Anmeldung auf jedem Rechner erledigt würde.
Antwort1
Mir fallen drei Optionen ein:
Machen Sie das Image nicht privat, sondern lassen Sie stattdessen zu, dass jeder, der auf den Registrierungsserver zugreifen kann, das Image herunterlädt. Dies ist in Umgebungen recht üblich, da das Image nur die Bibliotheken und Binärdateien zum Ausführen der Anwendung enthalten sollte, keine Konfigurationsdateien, Geheimnisse oder Daten, die zur Laufzeit eingefügt oder in einem Volume gespeichert würden.
Wenn jeder über Sudo-Zugriff verfügt, führen Sie die Docker-Befehle von Sudo aus, einschließlich der Anmeldung. Die Anmeldeinformationen werden unter dem Root-Benutzer gespeichert.
~/.docker/config.json
Erstellen Sie Ihren eigenen Anmeldeinformationshelfer, der nur die Anmeldung an den Host ausgibt. Die Schnittstelle des Anmeldeinformationshelfers ist ziemlich einfach, 4 Operationen (Speichern, Abrufen, Auflisten, Löschen), die in einem Shell-Skript implementiert werden könnten. Und für Anmeldungen benötigen Sie wahrscheinlich nur die Abrufoperation.
Dieses Hilfsskript für Anmeldeinformationen könnte wie folgt aussehen: docker-credential-your-helper
(wobei your-helper
der Name Ihrer Wahl stehen kann):
#!/bin/sh
your_registry='
{ "ServerURL": "your-registry",
"Username": "your-user",
"Secret": "your-pass"
}
'
if [ "$1" = "get" ]; then
read hostname
case "$hostname" in
your-registry)
echo "${your_registry}"
exit 0
;;
esac
elif [ "$1" = "list" ]; then
echo "your-registry"
fi
# everything else is unhandled
exit 1
Machen Sie diese Datei ausführbar und platzieren Sie sie im Pfad. Dann hätte jeder Benutzer ~/.docker/config.json
einen Hilfseintrag für die Anmeldeinformationen (beachten Sie, dass dieser docker-credential-
nicht in dieser Datei enthalten ist, sondern nur der Teil des Dateinamens danach):
{
"credHelpers": {
"your-host": "your-helper"
}
}