详解Docker Compose 中可用的环境变量问题
Compose的多个部分在某种情况下处理环境变量。本教程可以帮助你找到所需的信息。
1.替换Compose文件中的环境变量
可以使用shell中的环境变量填充Compose文件中的值:
web: image:"webapp:${TAG}"
更多信息请参考Compose文件手册中的Variablesubstitution章节。
2.设置容器中的环境变量
可以通过environment关键字设置服务容器中的环境变量,就跟使用dockerrun-eVARIABLE=VALUE...一样:
web: environment: -DEBUG=1
3.将环境变量传递到容器
在使用environment关键字时不赋值,就可以将shell中的环境变量传递给服务容器,就跟使用dockerrun-eVARIABLE...一样:
web: environment: -DEBUG
容器中的DEBUG变量的值从运行Compose的shell中的同名变量中获取。
4.“env_file”配置选项
可以通过env_file命令使用外部文件将多个环境变量传递到服务容器,就跟使用dockerrun--env-file=FILE...一样:
web: env_file: -web-variables.env
5.使用‘docker-composerun'设置环境变量
就像dockerrun-e命令一样,可以使用docker-composerun-e设置一次性容器上的环境变量:
docker-composerun-eDEBUG=1webpythonconsole.py
也可以通过从shell中传递一个变量,而不是直接赋值:
docker-composerun-eDEBUGwebpythonconsole.py
容器中的DEBUG变量的值从运行Compose的shell中的同名变量中获取。
6.“.env”文件
可以在名为.env的环境文件中为Compose文件中引用的任何环境变量设置默认值,或者用于配置Compose:
$cat.env TAG=v1.5 $catdocker-compose.yml version:'3' services: web: image:"webapp:${TAG}"
运行docker-composeup时,上面定义的web服务使用webapp:v1.5镜像。可以通过config命令将应用程序的配置信息打印到终端来验证:
$docker-composeconfig version:'3' services: web: image:'webapp:v1.5'
shell中的值优先于.env文件中指定的值。如果在shell中将TAG设置为不同的值,则镜像中将使用该值:
$exportTAG=v2.0 $docker-composeconfig version:'3' services: web: image:'webapp:v2.0'
当在多个文件中设置相同的环境变量时,以下是Compose用于选择要使用的值的优先级:
- Compose文件
- Environment文件
- Dockerfile
- 变量未定义
在下面的例子中,我们在Environment文件和Compose文件上设置了相同的环境变量:
$cat./Docker/api/api.env NODE_ENV=test $catdocker-compose.yml version:'3' services: api: image:'node:6-alpine' env_file: -./Docker/api/api.env environment: -NODE_ENV=production
运行容器时,在Compose文件中定义的环境变量优先。
$docker-composeexecapinode process.env.NODE_ENV 'production'
只有在environment或env_file没有DockerCompose条目时,Dockerfile中的任何ARG或ENV设置才会评估(evaluate)。
NodeJS容器的细节
如果你有脚本的package.json条目像NODE_ENV=testnodeserver.js一样启动,那么这将覆盖docker-compose.yml文件中的任何设置。
7.使用环境变量配置Compose
有几个环境变量可用来配置DockerCompose命令行行为。它们以COMPOSE_或DOCKER_开头,并记录在CLI环境变量中。
8.通过link创建环境变量
在第一版Compose文件中使用links选项时,会为每个链接创建环境变量。它们记录在Link环境变量参考中。
但是,这些变量已被弃用。link改为为主机创建别名。
原文地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。