我想在我的Dockerfile中根据特定的构建参数有条件地设置一些ENV变量。由于这样或那样的原因,ENV var不能直接映射到实际的构建参数,即我不能执行以下操作:
ARG myvar
ENV MYVAR $MYVAR这是一个非常复杂的映射,我不能简单地执行“前缀-${$MYVAR}”之类的操作。
我知道只使用shell命令来导出(然后可以访问if语句),但是以这种方式导出环境变量不会像我需要的那样在容器中持久存在。如果唯一的解决方案是重复地为我需要的每个RUN/CMD添加所需的env前缀(以及到达那里所需的所有逻辑),那么我会接受这一点。
我也注意到了这个答案Conditional ENV in Dockerfile,它确实有一个解决方案,其中(本质上)使用三元来触发某个ENV值,但因为我的情况更复杂,所以我不能只使用给定的解决方案。
有没有办法在Dockerfile中编写“逻辑”,同时仍然可以访问像ENV这样的Docker命令?
任何帮助都将不胜感激!
PS。
这是一个构建Node镜像的Dockerfile,所以我的最后几个步骤基本上看起来像这样
RUN npm run build
CMD ["npm", "run", "start"]发布于 2019-02-13 02:57:10
如果我没理解错你的问题,你想
if BUILD_VAR == v1:
set ENV MYVAR=aValue
else if YOUR_VAR == v2:
set ENV MYVAR=anotherValue解决方案:
ARG BUILD_VAR=v1
FROM scratch as build_v1
ONBUILD ENV MYVAR=aValue
FROM scratch as build_v2
ONBUILD ENV MYVAR=anotherValue
FROM build_${YOUR_VAR} AS final
...
RUN npm run build
CMD ["npm", "run", "start"]toplevel BUILD_VAR允许您使用docker build --build-arg BUILD_VAR=v1 .传递条件
由于使用了ONBUILD,因此只有在选择了相应的分支时才会执行指令ENV。
发布于 2021-02-18 18:45:55
我在容器上设置代理服务器时遇到了类似的问题。
我使用的解决方案是一个入口点脚本,以及另一个用于环境变量配置的脚本。使用RUN,您可以确保配置脚本在构建时运行,并在运行容器时运行入口点。
入口点脚本如下所示:
#!/bin/bash
# Run any other commands needed
# Run the main container command
exec "$@"在Dockerfile中,配置:
#copy bash scripts
COPY configproxy.sh /root
COPY startup.sh .
RUN ["/bin/bash", "-c", ". /root/configproxy.sh"]
ENTRYPOINT ["./entrypoint.sh"]
CMD ["sh", "-c", "bash"]看看here吧。
https://stackoverflow.com/questions/54655901
复制相似问题