ENV 和 ARG 指令

ENV

ENV <key> <value>
ENV <key>=<value> ...

ENV 指令将环境变量 <key> 设置为该值。该值将在所有后代Dockerfile 命令的环境中,并且可以在许多内联中替换。

ENV 指令有两种形式。第一种形式 ENV <key> <value> 将单个变量设置为一个值。第一个空格后的整个字符串将被视为 <value> - 包括空格和引号等字符。

第二种形式 ENV <key>=<value> ... 允许一次设置多个变量。请注意,第二种形式在语法中使用等号(=),而第一种形式则不然。与命令行解析一样,引号和反斜杠可用于在值内包含空格。

例如:

ENV myName="John Doe" myDog=Rex\ The\ Dog \
    myCat=fluffy

ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat fluffy

将在最终容器中产生相同的净结果,但第一种形式是首选,因为它产生一个缓存层。

当从生成的图像运行容器时,使用 ENV 设置的环境变量将保持不变。你可以使用 docker inspect 查看值,并使用 docker run --env <key>=<value> 更改它们。

ARG

如果你不想保留设置,请改用 ARGARG 将仅在构建期间设置环境。例如,设置

ENV DEBIAN_FRONTEND noninteractive

apt-get 用户通过 docker exec -it the-container bash 在交互式环境中进入容器时,可能会混淆基于 Debian 的图像。

相反,使用:

ARG DEBIAN_FRONTEND noninteractive

你也可以选择仅使用以下命令为单个命令设置值:

RUN <key>=<value> <command>