K
K
Kumu's wiki
搜索文档…
Compose 环境变量

在 Compose 文件中替换环境变量

你可以在 shell 中使用环境变量来填充 Compose 文件中的值:
1
web:
2
image: "webapp:${TAG}"
Copied!
可以通过 Compose 文件参考 变量替换 章节获取更多信息。

在容器中设置环境变量

可以通过 'environment' 键 来设置服务中容器的环境变量,同 docker run -e VARIABLE=VALUE ...
1
web:
2
environment:
3
- DEBUG=1
Copied!

传递环境变量给容器

你可以使用 'environment' 键 从 shell 直接传递环境变量到服务中的容器,而不赋值,同 docker run -e VARIABLE ...
1
web:
2
environment:
3
- DEBUG
Copied!
容器中 DEBUG 变量的值取自 Compose 运行的 shell 同名环境变量的值。

"env_file" 配置项

你可以通过 'env_file' 选项 让一个服务的容器从外部文件中传递多个环境变量,类似 docker run --env-file=FILE ...
1
web:
2
env_file:
3
- web-variables.env
Copied!

通过 'docker-compose run' 设置环境变量

docker run -e 一样,你可以执行 docker-compose run -e 设置环境变量:
1
docker-compose run -e DEBUG=1 web python console.py
Copied!
也可以传递一个没有值的环境变量,此时则会继承当前 shell 的环境变量值:
1
docker-compose run -e DEBUG web python console.py
Copied!

".env" 文件

你可以在名为 '.env' 的环境变量文件中,为 Compose 中引用或者用于配置 Compose 的任何环境变量设置默认值:
1
$ cat .env
2
TAG=v1.5
3
4
$ cat docker-compose.yml
5
version: '3'
6
services:
7
web:
8
image: "webapp:${TAG}"
Copied!
当你运行 docker-compose up,上面定义的 Web 服务使用镜像 webapp:v1.5。你可以使用 config 命令验证这一点,该命令会将你解析的应用程序配置输出到终端:
1
$ docker-compose config
2
3
version: '3'
4
services:
5
web:
6
image: 'webapp:v1.5'
Copied!
Shell 中的值优先于 .env 文件中指定的值。如果在 Shell 上把 TAG 设置为其它值,则会被替换为该值:
1
$ export TAG=v2.0
2
$ docker-compose config
3
4
version: '3'
5
services:
6
web:
7
image: 'webapp:v2.0'
Copied!
当你在多个文件中设置了相同的环境变量时,以下为 Compose 使用的优先级顺序:
    1、Compose 文件
    2、Shell 环境变量的值
    3、环境变量文件(.env)
    4、Dockerfile
    5、环境变量未定义
在下面的例子中,我们在环境变量文件和 Compose 文件中设置了同样的环境变量:
1
$ cat ./Docker/api/api.env
2
NODE_ENV=test
3
4
$ cat docker-compose.yml
5
version: '3'
6
services:
7
api:
8
image: 'node:6-alpine'
9
env_file:
10
- ./Docker/api/api.env
11
environment:
12
- NODE_ENV=production
Copied!
运行容器时,Compose 中定义的环境变量优先:
1
$ docker-compose exec api node
2
3
> process.env.NODE_ENV
4
'production'
Copied!
仅当 Compose 文件中没有 'enviroment' 或者 'env_file' 条目时,才会对 Dockerfile 中的 ARGENV 设置进行评估。
注意:针对 NodeJS 容器,如果有一个 package.json 条目 script:start,类似 NODE_ENV=test node server.js,那么这将会覆盖 docker-compose.yml 文件中的环境变量。(其实不仅仅是 NodeJS,所有容器启动脚本相关的操作都会覆盖系统自身的环境变量)

通过环境变量配置 Compose

这儿有一些环境变量来配置 Docker Compose 的命令行行为。他们以 COMPOSE_DOCKER_ 开头,具体可以见 CLI Environment Variables
最近更新 1yr ago