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 upweb上面定义的服务将使用该映像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用于选择要使用的值的优先级:

  1. 撰写档案
  2. 外壳环境变量
  3. 环境文件
  4. Docker文件
  5. 变量未定义

在下面的示例中,我们在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'

有任何ARGENV在设定Dockerfile仅当有将评估没有多克撰写的条目environmentenv_file

NodeJS容器的细节

如果您有like 的package.json条目,那么这将否决文件中的任何设置 。script:startNODE_ENV=test node server.jsdocker-compose.yml

使用环境变量配置撰写

可以使用几个环境变量来配置Docker Compose命令行行为。它们以COMPOSE_或开头DOCKER_,并记录在CLI环境变量中

撰写编排环境env文件