首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据build ARG在Dockerfile中有条件地设置ENV变量

根据build ARG在Dockerfile中有条件地设置ENV变量
EN

Stack Overflow用户
提问于 2019-02-13 01:49:57
回答 2查看 617关注 0票数 4

我想在我的Dockerfile中根据特定的构建参数有条件地设置一些ENV变量。由于这样或那样的原因,ENV var不能直接映射到实际的构建参数,即我不能执行以下操作:

代码语言:javascript
复制
ARG myvar
ENV MYVAR $MYVAR

这是一个非常复杂的映射,我不能简单地执行“前缀-${$MYVAR}”之类的操作。

我知道只使用shell命令来导出(然后可以访问if语句),但是以这种方式导出环境变量不会像我需要的那样在容器中持久存在。如果唯一的解决方案是重复地为我需要的每个RUN/CMD添加所需的env前缀(以及到达那里所需的所有逻辑),那么我会接受这一点。

我也注意到了这个答案Conditional ENV in Dockerfile,它确实有一个解决方案,其中(本质上)使用三元来触发某个ENV值,但因为我的情况更复杂,所以我不能只使用给定的解决方案。

有没有办法在Dockerfile中编写“逻辑”,同时仍然可以访问像ENV这样的Docker命令?

任何帮助都将不胜感激!

PS。

这是一个构建Node镜像的Dockerfile,所以我的最后几个步骤基本上看起来像这样

代码语言:javascript
复制
RUN npm run build
CMD ["npm", "run", "start"]
EN

回答 2

Stack Overflow用户

发布于 2019-02-13 02:57:10

如果我没理解错你的问题,你想

代码语言:javascript
复制
if BUILD_VAR == v1:
  set ENV MYVAR=aValue
else if YOUR_VAR == v2:
  set ENV MYVAR=anotherValue

解决方案:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2021-02-18 18:45:55

我在容器上设置代理服务器时遇到了类似的问题。

我使用的解决方案是一个入口点脚本,以及另一个用于环境变量配置的脚本。使用RUN,您可以确保配置脚本在构建时运行,并在运行容器时运行入口点。

入口点脚本如下所示:

代码语言:javascript
复制
#!/bin/bash
    
# Run any other commands needed 

# Run the main container command
exec "$@"

在Dockerfile中,配置:

代码语言:javascript
复制
#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吧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54655901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档