基于构建ARG在Dockerfile中有条件地设置ENV变量
我想基于某些构建ARG在我的Dockerfile中有条件地设置一些ENV变量。出于这样或那样的原因,ENV var不会直接映射到实际构建ARG,即我不能执行以下操作:
ARG myvar
ENV MYVAR $MYVAR
这是一个复杂的映射,我不能做,例如,“前缀 - $ {$ MYVAR}”,或者其他任何东西。
我知道只使用带有EXPORT的shell命令(然后可以访问if语句),但是以这种方式导出环境变量不会像我需要的那样在容器之间保持不变。如果唯一的解决方案就是为每个RUN / CMD重复加上所需的env前缀,我需要它(以及到达那里所需的所有逻辑),那么我会接受。
我也知道这个答案Conditional ENV in Dockerfile,它有一个解决方案,其中(基本上)三元用于触发某个ENV值,但由于我的情况更复杂,我不能只使用给定的解决方案。
有没有办法在Dockerfiles中编写“逻辑”,同时仍然可以访问像ENV这样的Docker命令?
任何帮助将非常感激!
PS。
这是一个用于构建节点映像的Dockerfile,所以我的最后几个步骤看起来基本上就像
RUN npm run build
CMD ["npm", "run", "start"]
回答如下:
如果我理解你的问题,你想要的
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
。
基于构建ARG在Dockerfile中有条件地设置ENV变量
我想基于某些构建ARG在我的Dockerfile中有条件地设置一些ENV变量。出于这样或那样的原因,ENV var不会直接映射到实际构建ARG,即我不能执行以下操作:
ARG myvar
ENV MYVAR $MYVAR
这是一个复杂的映射,我不能做,例如,“前缀 - $ {$ MYVAR}”,或者其他任何东西。
我知道只使用带有EXPORT的shell命令(然后可以访问if语句),但是以这种方式导出环境变量不会像我需要的那样在容器之间保持不变。如果唯一的解决方案就是为每个RUN / CMD重复加上所需的env前缀,我需要它(以及到达那里所需的所有逻辑),那么我会接受。
我也知道这个答案Conditional ENV in Dockerfile,它有一个解决方案,其中(基本上)三元用于触发某个ENV值,但由于我的情况更复杂,我不能只使用给定的解决方案。
有没有办法在Dockerfiles中编写“逻辑”,同时仍然可以访问像ENV这样的Docker命令?
任何帮助将非常感激!
PS。
这是一个用于构建节点映像的Dockerfile,所以我的最后几个步骤看起来基本上就像
RUN npm run build
CMD ["npm", "run", "start"]
回答如下:
如果我理解你的问题,你想要的
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
。