Docker Compose 中的环境变量优先级

在多个源中设置相同的环境变量时,Docker Compose 遵循优先规则来确定容器环境中该变量的值。

此页面包含有关每种设置环境变量的方法所采用的优先级的信息。

优先顺序 (最高到最低) 如下:

  1. Set usingdocker compose run -e在 CLI 中.
  2. set 的environmentenv_file属性,但使用从 shell 或环境文件插值的值。(您的默认.env文件或使用--env-file论点在 CLI 中)。
  3. 仅使用 Setenvironment属性在 Compose 文件中。
  4. 使用env_file属性在 Compose 文件中。
  5. ENV 指令的容器镜像中设置。 拥有任何ARGENV设置在Dockerfile仅当没有 Docker Compose 条目时才进行评估environment,env_filerun --env.

简单示例

在以下示例中,同一环境变量在.env文件,并使用environment属性:

$ cat ./webapp.env
NODE_ENV=test

$ cat compose.yml
services:
  webapp:
    image: 'webapp'
    env_file:
     - ./webapp.env
    environment:
     - NODE_ENV=production

使用environment属性优先。

$ docker compose run webapp env | grep NODE_ENV
NODE_ENV=production

高级示例

下表使用VALUE,例如,定义镜像版本的环境变量。

表的工作原理

每列代表一个上下文,您可以从中设置值或替换VALUE.

Host OS environment.env文件仅用于说明目的。实际上,它们本身不会在容器中产生变量,而是与environmentenv_file属性。

每行表示上下文的组合,其中VALUE是 set、substituted 或两者。Result 列指示VALUE在每种情况下。

#docker compose runenvironment属性env_file属性镜像ENVHost OS环境.env文件结果
1----VALUE=1.4VALUE=1.3-
2--VALUE=1.6VALUE=1.5VALUE=1.4-VALUE=1.6
3-VALUE=1.7-VALUE=1.5VALUE=1.4-VALUE=1.7
4---VALUE=1.5VALUE=1.4VALUE=1.3VALUE=1.5
5--env VALUE=1.8--VALUE=1.5VALUE=1.4VALUE=1.3VALUE=1.8
6--env VALUE--VALUE=1.5VALUE=1.4VALUE=1.3VALUE=1.4
7--env VALUE--VALUE=1.5-VALUE=1.3VALUE=1.3
8--VALUEVALUE=1.5VALUE=1.4VALUE=1.3VALUE=1.4
9--VALUEVALUE=1.5-VALUE=1.3VALUE=1.3
10-VALUE-VALUE=1.5VALUE=1.4VALUE=1.3VALUE=1.4
11-VALUE-VALUE=1.5-VALUE=1.3VALUE=1.3
12--env VALUEVALUE=1.7-VALUE=1.5VALUE=1.4VALUE=1.3VALUE=1.4
13--env VALUE=1.8VALUE=1.7-VALUE=1.5VALUE=1.4VALUE=1.3VALUE=1.8
14--env VALUE=1.8-VALUE=1.6VALUE=1.5VALUE=1.4VALUE=1.3VALUE=1.8
15--env VALUE=1.8VALUE=1.7VALUE=1.6VALUE=1.5VALUE=1.4VALUE=1.3VALUE=1.8

结果说明

结果 1:本地环境优先,但 Compose 文件未设置为在容器内复制此环境,因此未设置此类变量。

结果 2: 该env_file属性定义VALUE因此,容器环境会相应地进行设置。

结果 3: 该environment属性定义VALUE,因此容器环境会相应地设置/

结果 4:镜像的ENV指令声明变量VALUE,并且由于 Compose 文件未设置为覆盖此值,因此此变量由 image 定义

结果 5:docker compose runcommand 具有--envflag 设置一个显式值,并覆盖镜像设置的值。

结果 6: 该docker compose runcommand 具有--env标志设置为从环境中复制值。主机作系统值优先并复制到容器的环境中。

结果 7: 这docker compose runcommand 具有--env标志设置为从环境中复制值。值来自.envfile 是用于定义容器环境的选定对象。

结果 8: 该env_file属性设置为 replicateVALUE从本地环境。主机作系统值优先并复制到容器的环境中。

结果 9: 这env_file属性设置为 replicateVALUE从本地环境。值来自.envfile 是用于定义容器环境的选定对象。

结果 10: 这environment属性设置为 replicateVALUE从本地环境。主机作系统值优先并复制到容器的环境中。

结果 11:environment属性设置为 replicateVALUE从本地环境。值来自.envfile 是用于定义容器环境的选定对象。

结果 12: 这--env标志的优先级高于environmentenv_file属性,并将 is 设置为复制VALUE从本地环境。主机作系统值优先并复制到容器的环境中。

结果 13 到 15:这--env标志的优先级高于environmentenv_fileattributes 来设置值。