我想用动态值更新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"
我不想对该值进行硬编码。是否有可能实现它?
由于
答案 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"