Compose中的环境变量
预计阅读时间:5分钟
Compose有多个部分以一种或另一种方式处理环境变量。该页面应帮助您找到所需的信息。
在Compose文件中替换环境变量
可以在外壳中使用环境变量来填充Compose文件中的值:
web:
image: "webapp:${TAG}"
如果您有多个环境变量,则可以通过将它们添加到名为的默认环境变量文件中.env
或使用--env-file
命令行选项提供环境变量文件的路径来替换它们。
“ .env”文件
您可以在
名为的环境文件中为在Compose文件中引用或用于配置Compose的任何环境变量设置默认值.env
。该.env
文件路径如下:
- 与启动
+v1.28
,.env
文件被放置在项目目录的基础 - 对于以前的版本,除非
--project-directory
定义了a来覆盖.env
文件的路径,否则它将放置在执行Docker Compose命令的当前工作目录中。+v1.28
通过将文件路径限制为项目目录来解决此不一致问题。
$ cat .env
TAG=v1.5
$ cat docker-compose.yml
version: '3'
services:
web:
image: "webapp:${TAG}"
运行时docker-compose up
,web
上面定义的服务将使用该映像webapp:v1.5
。您可以使用config命令验证这一点,该
命令会将您解析的应用程序配置输出到终端:
$ docker-compose config
version: '3'
services:
web:
image: 'webapp:v1.5'
Shell中的值优先于.env
文件中指定的值。
如果您TAG
在外壳程序中设置为其他值,则in中的替换image
将使用该值:
$ export TAG=v2.0
$ docker-compose config
version: '3'
services:
web:
image: 'webapp:v2.0'
您可以使用命令行参数覆盖环境文件路径--env-file
。
使用“ --env-file”选项
通过将文件作为参数,你可以存储在任何地方,并适当命名,例如.env.ci
,.env.dev
,.env.prod
。使用以下--env-file
选项完成文件路径的传递:
docker-compose --env-file ./config/.env.dev up
该文件路径是相对于执行Docker Compose命令的当前工作目录的。
$ cat .env
TAG=v1.5
$ cat ./config/.env.dev
TAG=v1.6
$ cat docker-compose.yml
version: '3'
services:
web:
image: "webapp:${TAG}"
该.env
文件是默认加载的:
$ docker-compose config
version: '3'
services:
web:
image: 'webapp:v1.5'
传递--env-file
参数将覆盖默认文件路径:
$ docker-compose --env-file ./config/.env.dev config
version: '3'
services:
web:
image: 'webapp:v1.6'
当将无效的文件路径作为--env-file
参数传递时,Compose返回错误:
$ docker-compose --env-file ./doesnotexist/.env.dev config
ERROR: Couldn't find env file: /home/user/./doesnotexist/.env.dev
有关更多信息,请参见Compose文件参考中的“ 变量替换”部分。
在容器中设置环境变量
您可以使用'environment'键在服务的容器中设置环境变量
,就像这样
docker run -e VARIABLE=VALUE ...
:
web:
environment:
- DEBUG=1
将环境变量传递给容器
您可以使用'environment'键将环境变量从外壳直接传递到服务的容器,方法是
不给它们赋值,就像使用docker run -e VARIABLE ...
:
web:
environment:
- DEBUG
所述的值DEBUG
在容器变量是从值取为在其中撰写运行在壳中的相同变量。
“ env_file”配置选项
您可以使用'env_file'选项将多个环境变量从外部文件传递到服务的容器,就像使用docker run --env-file=FILE ...
以下命令一样:
web:
env_file:
- web-variables.env
使用'docker-compose run'设置环境变量
与相似docker run -e
,您可以使用以下方法在一次性容器上设置环境变量docker-compose run -e
:
docker-compose run -e DEBUG=1 web python console.py
您还可以通过不给它提供值来从shell传递变量:
docker-compose run -e DEBUG web python console.py
所述的值DEBUG
在容器变量是从值取为在其中撰写运行在壳中的相同变量。
当您在多个文件中设置相同的环境变量时,这是Compose用于选择要使用的值的优先级:
- 撰写档案
- 外壳环境变量
- 环境文件
- Docker文件
- 变量未定义
在下面的示例中,我们在Environment文件和Compose文件上设置了相同的环境变量:
$ cat ./Docker/api/api.env
NODE_ENV=test
$ cat docker-compose.yml
version: '3'
services:
api:
image: 'node:6-alpine'
env_file:
- ./Docker/api/api.env
environment:
- NODE_ENV=production
运行容器时,在Compose文件中定义的环境变量优先。
$ docker-compose exec api node
> process.env.NODE_ENV
'production'
有任何ARG
或ENV
在设定Dockerfile
仅当有将评估没有多克撰写的条目environment
或env_file
。
NodeJS容器的细节
如果您有like 的
package.json
条目,那么这将否决文件中的任何设置 。script:start
NODE_ENV=test node server.js
docker-compose.yml
使用环境变量配置撰写
可以使用几个环境变量来配置Docker Compose命令行行为。它们以COMPOSE_
或开头DOCKER_
,并记录在CLI环境变量中。