Docker Compose 中的环境变量优先级

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

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

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

  1. CLI 中使用 docker compose run -e 进行设置。
  2. 使用 or 属性设置,但使用从 shell 或环境文件插值的值进行设置。(默认 .env 文件,或使用 CLI 中的 --env-file 参数)。environmentenv_file
  3. 仅使用 Compose 文件中的 environment 属性进行设置。
  4. 在 Compose 文件中使用 env_file 属性
  5. ENV 指令的容器镜像中设置。 仅当 、 或 没有 Docker Compose 条目时,才会在 a 中具有 any 或 设置进行评估。ARGENVDockerfileenvironmentenv_filerun --env

简单示例

在以下示例中,文件中的同一环境变量与 Compose 文件中的 attribute 的值不同:.envenvironment

$ 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

列出列和文件仅用于说明目的。实际上,它们本身不会在容器中产生变量,而是与 or 属性结合使用。Host OS environment.envenvironmentenv_file

每行表示 where set 和/或 substituted 的上下文的组合。Result (结果) 列指示每个方案中的最终值。VALUEVALUE

#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:Compose 文件中的属性定义了一个显式值,因此相应地设置了容器环境。env_fileVALUE

结果 3:Compose 文件中的属性为 定义了一个显式值,因此容器环境被相应地设置/environmentVALUE

结果 4:image 的指令声明了变量 ,由于 Compose 文件未设置为覆盖此值,因此此变量由 image 定义ENVVALUE

结果 5:该命令设置了显式值的标志,并覆盖了镜像设置的值。docker compose run--env

结果 6:该命令设置了从环境中复制值的标志。主机操作系统值优先并复制到容器的环境中。docker compose run--env

结果 7:该命令设置了标志以从环境中复制值。Value from file 是选定用于定义容器环境的选项。docker compose run--env.env

结果 8:Compose 文件中的属性设置为从本地环境复制。主机操作系统值优先并复制到容器的环境中。env_fileVALUE

结果 9:Compose 文件中的属性设置为从本地环境复制。Value from file 是选定用于定义容器环境的选项。env_fileVALUE.env

结果 10:Compose 文件中的属性设置为从本地环境复制。主机操作系统值优先并复制到容器的环境中。environmentVALUE

结果 11:Compose 文件中的属性设置为从本地环境复制。Value from file 是选定用于定义容器环境的选项。environmentVALUE.env

结果 12:该标志的优先级高于 and 属性,并且要设置为从本地环境复制。主机操作系统值优先并复制到容器的环境中。--envenvironmentenv_fileVALUE

结果 13 到 15:该标志的优先级高于 and 属性,因此设置该值。--envenvironmentenv_file