环境替代

环境变量(使用ENV声明)同样可以在Dockerfile中当做变量使用。还可以处理转义,将字符串中的类似变量的语法包含在语句中。

环境变量在Dockerfile中可以用$variable_name或者${variable_name}表示。他们被同等的对待,并且通常使用括号来解决变量命名没有空格的问题,像${foo}_bar

  • ${variable_name}同样支持一些标准的bash修饰:

  • ${variable:-word}表明,如果variable被赋值了,那么variable的值就是被赋的值。如果没有被赋值,那么variable的值就为word

${variable:+word}表明,如果variable被赋值了,那么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
  • LABEL
  • USER
  • WORKDIR
  • VOLUME
  • STOPSIGNAL

以及

  • ONBUILD(当与上面的命令形成组合时)

注意:在1.4版本之前,ONBUILD指令是支持环境变量的,纵使我们和其他任何命令形成组合。

在同一条指令中,我们会为每个环境变量设置同样的值

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

def的值为hello,而不是bye。尽管ghi的值为bye因为他和上一条指令不是同一条指令。

results matching ""

    No results matching ""