2016-01-20 20 views
23

Ist es möglich, eine Docker-ENV-Variable auf das Ergebnis eines Befehls zu setzen? Like:Dockerfile - Setzen Sie ENV auf das Ergebnis des Befehls

ENV MY_VAR whoami 

ich will MY_VAR den Wert „root“ oder was auch immer whoami kehrt

+0

Siehe https://stackoverflow.com/questions/33201271/parse-a-variable-with-the-result-of-a-command-in-dockerfile – akhmed

Antwort

6

Ich hatte dasselbe Problem zu erhalten und fand Weg Umgebungsvariablen als Ergebnis der Funktion zu setzen, indem in dockerfile RUN-Befehl.

Zum Beispiel muss ich SECRET_KEY_BASE für Rails-Anwendung ohne Änderung nur einmal einzustellen, wie wäre, wenn ich laufen:

docker run -e SECRET_KEY_BASE="$(openssl rand -hex 64)" 

Stattdessen es ich schreibe String Dockerfile wie:

RUN bash -l -c 'echo export SECRET_KEY_BASE="$(openssl rand -hex 64)" >> /etc/bash.bashrc' 

und mein env Variable verfügbar von root, auch nach Bash-Login. oder

RUN /bin/bash -l -c 'echo export SECRET_KEY_BASE="$(openssl rand -hex 64)" > /etc/profile.d/docker_init.sh' 

werden dann befiehlt sie verfügbar Variable in CMD und ENTRYPOINT

Docker Cache es als Schicht und nur ändern, wenn Sie, bevor es einige Saiten ändern.

Sie können auch versuchen different ways Umgebungsvariable zu setzen.

4

Als Ergänzung zu DarkSideF Antwort.

Sie sollten beachten, dass jede Zeile/jeder Befehl in Dockerfile in einem anderen Container ausgeführt wird.

Sie können etwas tun:

RUN export bleah=$(hostname -f);echo $bleah; 

Dieses in einem einzigen Behälter ausgeführt wird.

Verwandte Themen