2016-01-20 26 views
23

Czy można ustawić zmienną ENV dokowanego do wyniku polecenia? odczuwalna:Dockerfile - ustaw ENV na wynik polecenia

ENV MY_VAR whoami 

chcę MY_VAR uzyskać wartość „root” lub cokolwiek WhoAmI powraca

+0

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

Odpowiedz

6

miałem ten sam problem i znaleźć sposób, aby ustawić zmienną środowiskową w wyniku czynności za pomocą polecenia Uruchom w dockerfile.

Na przykład muszę ustawić SECRET_KEY_BASE dla Rails aplikacji tylko raz, bez zmiany tak jak gdy uruchamiam:

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

Zamiast tego piszę do Dockerfile ciąg jak:

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

i mojej env zmienna dostępna z poziomu root, nawet po zalogowaniu basha. lub mogą być

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

to zmienna dostępna w CMD i punkt_wejścia poleceń

Docker cache go jako warstwy i zmienić tylko wtedy, gdy przed nim zmienić niektóre ciągi.

Możesz również wypróbować different ways, aby ustawić zmienną środowiskową.

4

Jako dodatek do odpowiedzi DarkSideF.

Należy pamiętać, że każda linia/polecenie w pliku Dockerfile jest uruchamiana w innym kontenerze.

można zrobić coś takiego:

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

ten jest prowadzony w jednym pojemniku.