2016-01-20 21 views
23

是否可以将docker ENV变量设置为命令的结果? 像:Dockerfile - 将ENV设置为命令的结果

ENV MY_VAR whoami 

我想MY_VAR来获取值“根”或任何WHOAMI回报

+0

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

回答

6

我有同样的问题,找到办法通过dockerfile使用运行命令来设置环境变量的函数的结果。

例如,我需要在不改变为将设置SECRET_KEY_BASE为Rails应用程序只有一次,当我运行:

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

相反,我写信给Dockerfile字符串,如:

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

和我的ENV即使在bash登录后,它也可以从root获得。 或可能

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

那么变量可以在CMD和入口点命令

泊坞高速缓存作为层且仅当您之前改变一些字符串改变。

您也可以尝试different ways来设置环境变量。

4

作为DarkSideF答案的补充。

您应该知道,Dockerfile中的每一行/命令都在另一个容器中运行。

你可以做这样的事情:

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

这是在一个容器中运行。