Docker Compose 中的环境变量优先级
在多个源中设置相同的环境变量时,Docker Compose 遵循优先规则来确定容器环境中该变量的值。
此页面包含有关每种设置环境变量的方法所采用的优先级的信息。
优先顺序 (最高到最低) 如下:
- Set using
docker compose run -e
在 CLI 中. - set 的
environment
或env_file
属性,但使用从 shell 或环境文件插值的值。(您的默认.env
文件或使用--env-file
论点在 CLI 中)。 - 仅使用 Set
environment
属性在 Compose 文件中。 - 使用
env_file
属性在 Compose 文件中。 - 在 ENV 指令的容器镜像中设置。
拥有任何
ARG
或ENV
设置在Dockerfile
仅当没有 Docker Compose 条目时才进行评估environment
,env_file
或run --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
文件仅用于说明目的。实际上,它们本身不会在容器中产生变量,而是与environment
或env_file
属性。
每行表示上下文的组合,其中VALUE
是 set、substituted 或两者。Result 列指示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: 该env_file
属性定义VALUE
因此,容器环境会相应地进行设置。
结果 3: 该environment
属性定义VALUE
,因此容器环境会相应地设置/
结果 4:镜像的ENV
指令声明变量VALUE
,并且由于 Compose 文件未设置为覆盖此值,因此此变量由 image 定义
结果 5:docker compose run
command 具有--env
flag 设置一个显式值,并覆盖镜像设置的值。
结果 6: 该docker compose run
command 具有--env
标志设置为从环境中复制值。主机作系统值优先并复制到容器的环境中。
结果 7: 这docker compose run
command 具有--env
标志设置为从环境中复制值。值来自.env
file 是用于定义容器环境的选定对象。
结果 8: 该env_file
属性设置为 replicateVALUE
从本地环境。主机作系统值优先并复制到容器的环境中。
结果 9: 这env_file
属性设置为 replicateVALUE
从本地环境。值来自.env
file 是用于定义容器环境的选定对象。
结果 10: 这environment
属性设置为 replicateVALUE
从本地环境。主机作系统值优先并复制到容器的环境中。
结果 11:environment
属性设置为 replicateVALUE
从本地环境。值来自.env
file 是用于定义容器环境的选定对象。
结果 12: 这--env
标志的优先级高于environment
和env_file
属性,并将 is 设置为复制VALUE
从本地环境。主机作系统值优先并复制到容器的环境中。
结果 13 到 15:这--env
标志的优先级高于environment
和env_file
attributes 来设置值。