【发布时间】:2019-03-03 07:55:19
【问题描述】:
我已经导出了变量,以确保即使在新的 shell 实例中,变量也会被持久化,但它不起作用...... 我不知道我该怎么做。 我做了很多研究和测试,没有任何结论。
Dockerfile:
FROM bitnami/minideb:stretch
SHELL ["/bin/bash", "-c"]
ARG VAR1="1"
ARG VAR2="Hello"
# Export arguments
RUN export VAR1="${VAR1}" \
&& export VAR2="${VAR2}"
# Output "Hello world"
RUN if [ $VAR1 = "1" ]; then VAR2+=" world"; fi \
&& echo $VAR2
# Output "Hello" instead of "Hello World"
RUN echo $VAR2
肯定每个RUN 都发生在一个新的shell 中。
但是,既然export VAR2="${VAR2} 被持久化了,为什么VAR2+=" world" 没有持久化呢?
我真的不明白。
提前感谢任何找到解决这种奇怪行为的方法的人。
【问题讨论】:
-
RUN export ...任何事情都是无操作的;该声明没有保留。我认为是you're getting the ARG value expanded。 -
@DavidMaze 不,它没有扩展,它们正确导出为
env vars。请参阅我的回答,$VAR1未 扩展但仅在bash脚本中使用,因为我使用的是单引号而不是双引号。
标签: bash docker dockerfile