Ich muss Skripte schreiben, die Dienste auf Docker-Swarm-Clustern erstellen. Ein Beispielskript würde ungefähr so aussehen:
docker service create \
--name postgres \
--mode global \
--constraint "node.labels.postgres==master" \
--network my-network \
--env POSTGRES_USER="postgres" \
--env POSTGRES_PASSWORD="****" \
postgres:10
Die Umgebungsvariablen POSTGRES_USER und POSTGRES_PASSWORD sollten aus Docker-Geheimnissen stammen. Beispiel:
echo "example_password" | docker secret create postgres-password -
Ich verstehe, dass auf das Geheimnis als Datei innerhalb eines laufenden Containers zugegriffen werden kann. Aber im obigen Beispiel muss es als Umgebungsvariable an den Befehl „service create“ übergeben werden. Es wird vom Einstiegspunkt des Containers verwendet und muss daher VOR der Erstellung des Containers angezeigt werden. Wie kann ich also ein Geheimnis an den Schalter --env des Befehls „docker service create“ übergeben?
Antwort1
Wie hier angegebenhttps://github.com/docker-library/docs/blob/master/postgres/README.mdSie können Swarm-Geheimnisse im Postgres-Dienst verwenden, wenn Sie das Suffix _FILE wie folgt hinzufügen:
docker service create \
--name postgres \
--mode global \
--constraint "node.labels.postgres==master" \
--network my-network \
--secret "postgres-password" \
--env POSTGRES_USER="postgres" \
--env POSTGRES_PASSWORD_FILE="/run/secrets/postgres-password" \
postgres:10
Wenn Sie nach einer allgemeinen Lösung für einen beliebigen Dienst fragen, ist dies nicht möglich, ohne einen Container oder Dienst zu erstellen, der Passwörter im Klartext offenlegt (z. B. Nginx, das Passwörter aus Dateien liest, die geheim sind).