ENV
ENV指令将环境变量设置为值。此值可以用于构建阶段中所有后续指令之中,并且在许多情况下也可以内联替换。该值将被解释为其他环境变量,因此如果不对引号字符进行转义,则将其删除。像命令行解析一样,引号和反斜杠可用于在值中包含空格。
示例:
ENV指令允许一次设置多个变量,下面的示例将在最终镜像中产生相同的结果:
从结果镜像运行容器时,使用ENV设置的环境变量将保留。我们可以使用docker inspect查看值,并使用docker run --env <key>=<value>更改它们。
运行上面Dockerfile构建的镜像时的输出结果:
可以看到上面的输出结果中包含了咱们之前在Dockerfile中定义的环境变量。
环境变量的持久性可能导致意外的副作用。例如,设置ENV DEBIAN_FRONTEND=noninteractive会更改apt-get的行为,并可能使镜像用户感到困惑。
如果仅在构建过程中需要环境变量,而在最终的镜像中不需要,请考虑为单个命令设置一个值:
或使用ARG,因为在最终生成的镜像中不会保留ARG设置的变量:
可选语法
ENV指令还允许使用另一种语法ENV ,省略了=。例如:
此语法不允许在单个ENV指令中设置多个环境变量,并且可能会造成混淆。例如,以下代码将单个环境变量ONE设置为TWO= THREE=world:
支持使用备用语法是为了实现向后兼容,但出于上述原因,不建议使用该语法,并且在将来的发行版中可能会删除该语法。
Last updated