Dockerfile参考(4) – 使用环境变量

由EVN指令声明的环境变量也可以用在Dockerfile的一些指令中作为变量使用。转义符也将类似变量的语法转义为语句。
在Dockerfile引用环境变量可以使用$variable_name或${variable_name}。它们是等同的,其中大括号的变量是用在没有空格的变量名中的,如${foo}_bar。
${variable_name}变量也支持一些标准的bash修饰符,如:

  • ${variable:-word}表示如果variable设置了,那么结果就是设置的值。否则设置值为word
  • ${variable:+word}表示如果variable设置了,那么结果是word值,否则为空值。
  • word可以是任意的字符,包括额外的环境变量。
    转义符可以添加在变量前面:$foo or ${foo},例如,会分别转换为$foor和${foo}。
    示例:

    1. FROM busybox
    2. ENV foo /bar
    3. WORKDIR ${foo}   # WORKDIR /bar
    4. ADD . $foo       # ADD . /bar
    5. COPY $foo /quux # COPY $foo /quux

    环境变量支持在下面的指令中使用:

  • ADD
  • COPY
  • ENV
  • EXPOSE
  • LABEL
  • USER
  • WORKDIR
  • VOLUME
  • STOPSIGNAL
  • 也包括:

  • ONBUILD
  • 注意:1.4之前的版本,ONBUILD指令不支持环境变量,即使是与上面列出的指令一起使用。

    环境变量的替换在整个命令使用的值是一样的。例如:

    1. ENV abc=hello
    2. ENV abc=bye def=$abc
    3. ENV ghi=$abc

    def的值是hello,不是bye,不过,ghi的值为bye,因为设置abc为bye的命令与设置ghi命令不同。