Dockerfile ENV指令

定义环境变量

ENV

定义环境变量

1
ENV <key>=<value> ... # 但只能设置一个环境变量 ENV MY_VAR my-value

使用环境变量

通过 ENV 指令可以声明环境变量,可以在以下指令中使用环境变量

  • ADD
  • COPY
  • ENV
  • EXPOSE
  • FROM
  • LABEL
  • STOPSIGNAL
  • USER
  • VOLUME
  • WORKDIR
  • ONBUILD

使用环境变量的方式

有两种

  • $variable_name
  • ${variable_name}

${variable_name} 语法还支持以下指定的一些标准 bash 修饰符

  • ${variable:-word}:表示如果设置了 variable,那么结果就是那个值;如果未设置变量,则结果将是 word
  • ${variable:+word}:表示如果设置了 variable,则结果为 word,否则为空字符串
  • 在所有情况下, word 可以是任何字符串,包括额外的环境变量

简单栗子

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

覆盖环境变量的栗子

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

def 的值是 hello,ghi 的值是 bye

注意

  • 当容器从生成的镜像运行时,使用 ENV 设置的环境变量将持续存在
  • 可以使用 docker inspect 查看值,并使用 docker run --env=更改它们

实际栗子

dockerfile

1
FROM nginx EXPOSE 80 ENV test=test1234