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

Tho*_*hom 6 dynamic environment-variables docker

我想用动态值更新PATH环境变量.这是我到目前为止在Dockerfile中尝试过的:

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

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

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

我不想硬编码这个值.有可能实现吗?

谢谢

Ste*_*ich 5

我们不能这样做,因为这将是一个巨大的安全问题。这意味着你可以像这样运行和环境变量

 ENV PATH $(rm -rf /)
Run Code Online (Sandbox Code Playgroud)

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

ARG DYNAMIC_VALUE 
ENV PATH=${DYNAMIC_VALUE:-unknown}
RUN echo $PATH
Run Code Online (Sandbox Code Playgroud)

并使用以下命令构建图像:

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

或者,如果您想从主机上现有的环境变量复制信息;

> export DYNAMIC_VALUE=foobar
> docker build --build-arg DYNAMIC_VALUE .
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas -2

不确定这样的东西是否是您正在寻找的...稍微修改一下您已经拥有的内容。我的主要问题是,您试图用这部分完成什么?: '$(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"
Run Code Online (Sandbox Code Playgroud)