Environment replacement

环境变量替换

环境变量(用ENV语句声明)也可以在某些指令中作为在Dockerfile能够被解释的变量使用。转义也可以通过将类似变量的语法实际包含在语句中来进行处理。

Dockerfile中使用$variable_name${variable_name}表示环境变量。它们被同等对待,并且大括号语法通常用于解决变量名没有空格的问题,例如${foo}_bar

${variable_name}语法还支持一些标准的bash修饰符,如下所示:

  • ${variable:-word}表示如果变量设置了值,那么结果将是该值。如果没有设置变量的值,则结果为word

  • ${variable:+word}表示如果变量设置了值,则word将为变量值,否则结果为空字符串。

    在所有情况下,word可以是任何字符串,甚至 可以包括其他环境变量。

可以通过在变量前添加\来进行转义:例如,$foo${foo}将分别转换为$foo${foo}文字。

示例(解析的表示形式显示在#后面):

FROM busybox
ENV FOO=/bar
WORKDIR ${FOO}   # WORKDIR /bar
ADD . $FOO       # ADD . /bar
COPY \$FOO /quux # COPY $FOO /quux

在Dockerfile中,以下指令列表支持环境变量:

  • ADD

  • COPY

  • ENV

  • EXPOSE

  • FROM

  • LABEL

  • STOPSIGNAL

  • USER

  • VOLUME

  • WORKDIR

  • ONBUILD (该指令可以与上面的指令组合起来使用)

对于整条指令当中的每一个变量,进行变量替换时,将使用相同的值。换句话说,在此示例中:

ENV abc=hello
ENV abc=bye def=$abc
ENV ghi=$abc

上述指令将使def的值为hello,而不是bye。但是,ghi的值将为bye,因为它与abc=bye不在同一条指令中。

Last updated