Docker Compose 中的环境变量优先级
在多个源中设置相同的环境变量时,Docker Compose 遵循优先规则来确定容器环境中该变量的值。
此页面包含有关每种设置环境变量的方法所采用的优先级的信息。
优先顺序 (最高到最低) 如下:
- 在 CLI 中使用
docker compose run -e
进行设置。 - 使用 or 属性设置,但使用从 shell 或环境文件插值的值进行设置。(默认
.env
文件,或使用 CLI 中的--env-file
参数)。environment
env_file
- 仅使用 Compose 文件中的
environment
属性进行设置。 - 在 Compose 文件中使用
env_file
属性。 - 在 ENV 指令的容器镜像中设置。
仅当 、 或 没有 Docker Compose 条目时,才会在 a 中具有 any 或 设置进行评估。
ARG
ENV
Dockerfile
environment
env_file
run --env
简单示例
在以下示例中,文件中的同一环境变量与 Compose 文件中的 attribute 的值不同:.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
列出列和文件仅用于说明目的。实际上,它们本身不会在容器中产生变量,而是与 or 属性结合使用。Host OS environment
.env
environment
env_file
每行表示 where set 和/或 substituted 的上下文的组合。Result (结果) 列指示每个方案中的最终值。VALUE
VALUE
# | docker compose run | environment 属性 | env_file 属性 | 镜像ENV | Host OS 环境 | .env 文件 | 结果 | |
---|---|---|---|---|---|---|---|---|
1 | - | - | - | - | VALUE=1.4 | VALUE=1.3 | - | |
2 | - | - | VALUE=1.6 | VALUE=1.5 | VALUE=1.4 | - | VALUE=1.6 | |
3 | - | VALUE=1.7 | - | VALUE=1.5 | VALUE=1.4 | - | VALUE=1.7 | |
4 | - | - | - | VALUE=1.5 | VALUE=1.4 | VALUE=1.3 | VALUE=1.5 | |
5 | --env VALUE=1.8 | - | - | VALUE=1.5 | VALUE=1.4 | VALUE=1.3 | VALUE=1.8 | |
6 | --env VALUE | - | - | VALUE=1.5 | VALUE=1.4 | VALUE=1.3 | VALUE=1.4 | |
7 | --env VALUE | - | - | VALUE=1.5 | - | VALUE=1.3 | VALUE=1.3 | |
8 | - | - | VALUE | VALUE=1.5 | VALUE=1.4 | VALUE=1.3 | VALUE=1.4 | |
9 | - | - | VALUE | VALUE=1.5 | - | VALUE=1.3 | VALUE=1.3 | |
10 | - | VALUE | - | VALUE=1.5 | VALUE=1.4 | VALUE=1.3 | VALUE=1.4 | |
11 | - | VALUE | - | VALUE=1.5 | - | VALUE=1.3 | VALUE=1.3 | |
12 | --env VALUE | VALUE=1.7 | - | VALUE=1.5 | VALUE=1.4 | VALUE=1.3 | VALUE=1.4 | |
13 | --env VALUE=1.8 | VALUE=1.7 | - | VALUE=1.5 | VALUE=1.4 | VALUE=1.3 | VALUE=1.8 | |
14 | --env VALUE=1.8 | - | VALUE=1.6 | VALUE=1.5 | VALUE=1.4 | VALUE=1.3 | VALUE=1.8 | |
15 | --env VALUE=1.8 | VALUE=1.7 | VALUE=1.6 | VALUE=1.5 | VALUE=1.4 | VALUE=1.3 | VALUE=1.8 |
结果说明
结果 1:本地环境优先,但 Compose 文件未设置为在容器内复制此环境,因此未设置此类变量。
结果 2:Compose 文件中的属性定义了一个显式值,因此相应地设置了容器环境。env_file
VALUE
结果 3:Compose 文件中的属性为 定义了一个显式值,因此容器环境被相应地设置/environment
VALUE
结果 4:image 的指令声明了变量 ,由于 Compose 文件未设置为覆盖此值,因此此变量由 image 定义ENV
VALUE
结果 5:该命令设置了显式值的标志,并覆盖了镜像设置的值。docker compose run
--env
结果 6:该命令设置了从环境中复制值的标志。主机操作系统值优先并复制到容器的环境中。docker compose run
--env
结果 7:该命令设置了标志以从环境中复制值。Value from file 是选定用于定义容器环境的选项。docker compose run
--env
.env
结果 8:Compose 文件中的属性设置为从本地环境复制。主机操作系统值优先并复制到容器的环境中。env_file
VALUE
结果 9:Compose 文件中的属性设置为从本地环境复制。Value from file 是选定用于定义容器环境的选项。env_file
VALUE
.env
结果 10:Compose 文件中的属性设置为从本地环境复制。主机操作系统值优先并复制到容器的环境中。environment
VALUE
结果 11:Compose 文件中的属性设置为从本地环境复制。Value from file 是选定用于定义容器环境的选项。environment
VALUE
.env
结果 12:该标志的优先级高于 and 属性,并且要设置为从本地环境复制。主机操作系统值优先并复制到容器的环境中。--env
environment
env_file
VALUE
结果 13 到 15:该标志的优先级高于 and 属性,因此设置该值。--env
environment
env_file