docker 中“运行”命令中的变量扩展

问题描述 投票:0回答:1

示例1:-

FROM ubuntu:latest
SHELL ["/bin/bash", "-c"]
RUN echo "export MY_VARIABLE=my_value" >> ~/.profile
RUN cat ~/.profile
RUN "source ~/.profile && echo env variable4: $MY_VARIABLE"

sudo docker build --no-cache -t hello-image --progress plain  .
o/p:-
variable4:my_value

示例2:-

FROM ubuntu:latest
RUN echo "export MY_VARIABLE=my_value" >> ~/.profile
RUN cat ~/.profile
RUN /bin/bash -c "source ~/.profile && echo env variable4: $MY_VARIABLE"

sudo docker build --no-cache -t hello-image --progress plain  .
o/p:-
variable4:

为什么在第一个示例中,“$MY_VARIABLE”得到值“my_value”,但在第二个示例中它是空字符串?

bash docker dockerfile sh
1个回答
0
投票
RUN /bin/bash -c "source ~/.profile && echo env variable4: $MY_VARIABLE"

当 run、entrypoint 或 cmd 不是 exec 格式(JSON 数组)时,内容将传递到 shell 来执行。所以上面的运行如下:

/bin/sh -c "/bin/bash -c \"source ~/.profile && echo env variable4: $MY_VARIABLE\""

在这种情况下,

$MY_VARIABLE
被第一个
/bin/sh
扩展,然后运行bash来获取配置文件并打印没有任何变量的回显(因为它已经扩展了)。

© www.soinside.com 2019 - 2024. All rights reserved.