Dockerfile - 使用动态值定义ENV变量

时间:2016-01-18 16:50:47

标签: docker dynamic environment-variables

我想用动态值更新PATH环境变量。这是我迄今为止在Dockerfile中尝试的内容:

...
ENV PATH '$(dirname $(find /opt -name "ruby" | grep -i bin)):$PATH'
...

但是导出显示该命令未被解释:

root@97287b22c251:/# export
declare -x PATH="\$(dirname \$(find /opt -name \"ruby\" | grep -i bin)):\$PATH"

我不想对该值进行硬编码。是否有可能实现它?

由于

2 个答案:

答案 0 :(得分:1)

我们不能这样做,因为那将是一个巨大的安全问题。意味着您可以运行

这样的环境变量
 ENV PATH $(rm -rf /)

但是,在构建图像时,您可以通过--build-arg(ARG)传递信息;

ARG DYNAMIC_VALUE 
ENV PATH=${DYNAMIC_VALUE:-unknown}
RUN echo $PATH

并使用以下图像制作图像:

> docker build --build-arg DYNAMIC_VALUE=$(dirname $(find /opt -name "ruby" | grep -i bin)):$PATH .

或者,如果要从主机上现有的env-var复制信息;

> export DYNAMIC_VALUE=foobar
> docker build --build-arg DYNAMIC_VALUE .

答案 1 :(得分:-1)

不确定是否正在寻找这样的东西...对已有的东西进行了稍微的修改。我的主要问题是,您打算如何完成这部分? '$(dirname $(find /opt -name "ruby" | grep -i bin)):$PATH' 问题的一部分可能是使用单引号和双引号导致扩展。

FROM alpine:3.4
RUN PATH_TO_ADD=$(dirname $(find /opt -name "ruby" | grep -i bin)) || echo Error locating files
ENV PATH "$PATH:$PATH_TO_ADD"
相关问题