环境替代
环境变量(使用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中的下列指令所支持。
ADDCOPYENVEXPOSELABELUSERWORKDIRVOLUMESTOPSIGNAL
以及
ONBUILD(当与上面的命令形成组合时)
注意:在1.4版本之前,ONBUILD指令是不支持环境变量的,纵使我们和其他任何命令形成组合。
在同一条指令中,我们会为每个环境变量设置同样的值
ENV abc=hello
ENV abc=bye def=$abc
ENV ghi=$abc
def的值为hello,而不是bye。尽管ghi的值为bye因为他和上一条指令不是同一条指令。