环境替代
环境变量(使用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
因为他和上一条指令不是同一条指令。