Ich habe einen Dienst, den ich durch Rancher per Docker-Compose erreiche. Mein Problem ist, dass ich ein Kennwort festlegen muss, nachdem der Container bereitgestellt wurde.
Rancher-Geheimnisse funktionieren so, dass ich mein Geheimnis einsetze und Rancher ein Volume in meinem Container mit einer Datei mounte, die mein Geheimnis enthält. Ich hatte gehofft, ein Skript ausführen zu können, um dieses Geheimnis zu packen, und es als Passwort in meine Konfigurationsdatei zu setzen.
Ich glaube nicht, dass ich einen Weg finden kann, dieses Geheimnis durch das Dockerfile zu bekommen, da ich nicht will, dass das Geheimnis in Trottel ist, also bleibe ich über Docker-Compose.
Weiß jemand, ob das möglich ist?
Der Trick besteht darin, den compose COMMAND zu überschreiben, um die erforderliche Init-Aktion auszuführen, bevor der ursprüngliche Befehl aufgerufen wird.
init.sh
nennen. Sie fügen es Ihrem Bild hinzu.Dockerfile:
FROM: sourceimage:tag
COPY init.sh /usr/local/bin/
docker-compose.yml:
services:
myservice:
image: something:tag
...
command: /usr/local/bin/init.sh && exec the_original_command_goes_here
Es ist wichtig, exec
zu verwenden, bevor Sie den Hauptbefehl aufrufen. Dadurch wird der Befehl als erster Prozess (PID1) installiert, der Signale wie Stop oder Kill empfängt.
docker-compose gibt an, wie Container gestartet werden, nicht wie ein vorhandener laufender Container geändert werden soll.
Die Rancher-Dokumentation erwähnt, dass Sie für die standardmäßige Verwendung von Geheimnissen das Geheimnis anhand des Namens im Secrets-Array im docker-compose.yml
referenzieren können.
Der Zieldateiname hat denselben Namen wie der Name des Geheimnisses.
Standardmäßig wird der Zieldateiname als Benutzer-ID und Gruppen-ID 0 und als Dateimodus 0444 erstellt.
Wenn Sie den geheimen Teil auf "true" setzen, wird sichergestellt, dass das Geheimnis bereits erstellt wurde.Beispiel für einen grundlegenden
docker-compose.yml
:
version: '2'
services:
web:
image: sdelements/lets-chat
stdin_open: true
secrets:
- name-of-secret
labels:
io.rancher.container.pull_image: always
secrets:
name-of-secret:
external: true
Wie in " So wird ein einzelner laufender Docker-Compose-Container aktualisiert " dargestellt, würde das Aktualisieren eines Containers eine "Build-Kill-Up-Sequenz" beinhalten.
docker-compose up -d --no-deps --build <service_name>