【发布时间】:2018-10-18 17:41:51
【问题描述】:
在我的 Dockerfile 中,我想用一个字符串替换一个变量。
ARG w=world
RUN echo 'Hello $w'
我希望输出为Hello world,但实际输出为Hello $w
【问题讨论】:
标签: bash docker dockerfile
在我的 Dockerfile 中,我想用一个字符串替换一个变量。
ARG w=world
RUN echo 'Hello $w'
我希望输出为Hello world,但实际输出为Hello $w
【问题讨论】:
标签: bash docker dockerfile
RUN echo "Hello $w" 工作正常。 ARG 在双引号内解析。
【讨论】:
Docker 不会在 RUN 命令中扩展 ARG 值。相反,它将 ARG 作为环境变量注入。 shell 本身扩展了变量,我使用的所有 Linux shell 的行为都根据引用的类型而有所不同。
单引号指示shell不要扩展任何东西,你只需要转义单引号和转义字符。而双引号包括变量扩展以及许多其他转义字符。有关详细信息,请参阅 shell 上的手册页。
所以您已经找到的解决方案是:
RUN echo "Hello $w"
【讨论】:
env 将丢失所有已传递的环境变量。为了显示带有扩展变量的命令,我将运行 set -x 或在单个命令前加上 echo。例如。如果命令是ls $x,我会运行echo debugging: ls $x