Die übergabe der variable von container-start-Datei
Habe ich die folgenden Zeilen in ein Dockerfile, wo ich will, um einen Wert in einer config-Datei ein default-Wert, bevor die Anwendung beginnt, bis am Ende-und bieten Optional die Einstellung, es mit der -e
option beim starten der container.
Ich versuche, dies zu tun mit Docker ' s ENV
commando
ENV CONFIG_VALUE default_value
RUN sed -i 's/CONFIG_VALUE/'"$CONFIG_VALUE"'/g' CONFIG_FILE
CMD command_to_start_app
Habe ich den string CONFIG_VALUE explizit in der Datei CONFIG_FILE und der default-Wert aus dem Dockerfile wird richtig ersetzt. Jedoch wenn ich den container mit den zusätzlichen -e CONFIG_VALUE=100
die substitution nicht durchgeführt wird, wird der Standardwert setzen im Dockerfile gehalten wird.
Wenn ich
docker exec -i -t container_name bash
sowie echo $CONFIG_VALUE
im inneren des Behälters die Umgebungsvariable enthält den gewünschten Wert 100.
- Dank, durch die Inzidenz dein Beispiel hat mir geholfen, 'escape' die Umgebungsvariable für die sed richtig (unter Ausschluss der Teil mit ").
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte das nicht möglich sein, in einem Dockerfile: diese Anweisungen sind statische, für die Herstellung eines Bildes.
Wenn Sie brauchen, Laufzeit Unterricht bei der Einführung eines container-Sie sollte code Sie Sie in ein Skript namens durch die
CMD
Richtlinie.In anderen Worten, die
sed
stattfinden würde in einem Skript, dass dieCMD
genannt. Wenn du diedocker run
, das script müsste Zugriff auf die Umgebungsvariable nur vor, sagtedocker run
.Anweisungen im Dockerfile ausgewertet line-by-line, wenn Sie
docker build
und nicht neu, der zur Laufzeit ausgewertet.Können Sie noch tun, dieser jedoch durch die Verwendung einer entrypoint-script, das zur Laufzeit ausgewertet wird, nachdem alle Umgebungsvariablen festgelegt wurden.
Beispielsweise können Sie Folgendes definieren
entrypoint.sh
Skript:Den
exec "$@"
wird ausgeführt, eine CMD oder Befehl eingestellt ist.Fügen Sie es zu dem Dockerfile e.g:
Beachten Sie, dass wenn Sie eine vorhandene entrypoint, müssen Sie es zu verschmelzen mit diesem - man kann nur einen entrypoint.
Nun sollten Sie feststellen, dass die Umgebungsvariable wird respektiert ich.e:
Sollte funktionieren wie erwartet.