Docker ENV和ARG指令

示例

ENV

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

该ENV指令将环境变量<key>设置为value。此值将存在于所有“后代” 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

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

ENV DEBIAN_FRONTEND noninteractive

apt-get当用户通过交互上下文进入容器时,可能会使用户对基于Debian的图像感到困惑docker exec -it the-container bash。

而是使用:

ARG DEBIAN_FRONTEND noninteractive

您也可以仅通过以下方式为单个命令设置一个值:

RUN <key>=<value> <command>