【问题标题】:Dockerfile ARG substitution in a string in RUN commandRUN 命令中的字符串中的 Dockerfile ARG 替换
【发布时间】:2018-10-18 17:41:51
【问题描述】:

在我的 Dockerfile 中,我想用一个字符串替换一个变量。

ARG w=world
RUN echo 'Hello $w'

我希望输出为Hello world,但实际输出为Hello $w

【问题讨论】:

    标签: bash docker dockerfile


    【解决方案1】:

    RUN echo "Hello $w" 工作正常。 ARG 在双引号内解析。

    【讨论】:

      【解决方案2】:

      Docker 不会在 RUN 命令中扩展 ARG 值。相反,它将 ARG 作为环境变量注入。 shell 本身扩展了变量,我使用的所有 Linux shell 的行为都根据引用的类型而有所不同。

      单引号指示shell不要扩展任何东西,你只需要转义单引号和转义字符。而双引号包括变量扩展以及许多其他转义字符。有关详细信息,请参阅 shell 上的手册页。

      所以您已经找到的解决方案是:

      RUN echo "Hello $w"
      

      【讨论】:

      • 只是出于兴趣查看扩展值,可能对调试有用。 ?
      • @choco 在 Linux 中,env 将丢失所有已传递的环境变量。为了显示带有扩展变量的命令,我将运行 set -x 或在单个命令前加上 echo。例如。如果命令是ls $x,我会运行echo debugging: ls $x
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 2017-03-06
      • 2015-08-07
      • 2023-04-11
      • 2017-01-22
      • 1970-01-01
      相关资源
      最近更新 更多