在容器的环境中设置环境变量

在服务配置中有一个显式条目来实现此目的之前,不会设置容器的环境。借助 Compose,您可以通过两种方式使用 Compose 文件在容器中设置环境变量。

提示

不要使用环境变量将敏感信息(如密码)传递到容器中。请改用 secrets

使用 environment 属性

您可以使用 .compose.yml

它支持 list 和 mapping 语法:

services:
  webapp:
    environment:
      DEBUG: "true"

等效于

services:
  webapp:
    environment:
      - DEBUG=true

有关如何使用它的更多示例,请参阅 environment 属性

其他信息:

  • 您可以选择不设置值,并将环境变量从 shell 直接传递到容器。它的工作方式与以下相同:docker run -e VARIABLE ...
    web:
      environment:
        - DEBUG

容器中变量的值取自运行 Compose 的 shell 中同一变量的值。请注意,在这种情况下,如果未设置 shell 环境中的变量,则不会发出警告。DEBUGDEBUG

  • 您还可以利用插值。在以下示例中,结果与上述结果类似,但如果未在 shell 环境或项目目录中的文件中设置变量,Compose 会向您发出警告。DEBUG.env

    web:
      environment:
        - DEBUG=${DEBUG}

使用 env_file 属性

还可以使用 .env 文件env_file 属性设置容器的环境。

services:
  webapp:
    env_file: "webapp.env"

使用文件允许您使用同一文件供普通命令使用,或者在多个服务中共享同一文件,而无需复制较长的 YAML 块。.envdocker run --env-file ....envenvironment

它还可以帮助您将环境变量与主配置文件分开,从而提供更有条理和安全的方式来管理敏感信息,因为您不需要将文件放在项目目录的根目录中。.env

env_file 属性还允许您在 Compose 应用程序中使用多个文件。.env

在属性中指定的文件路径是相对于文件位置的。.envenv_filecompose.yml

重要

文件中的插值是 Docker Compose CLI 的一项功能。.env

运行 .docker run --env-file ...

其他信息:

  • 如果指定了多个文件,则按顺序计算这些文件,并且可以覆盖在先前文件中设置的值。
  • 从 Docker Compose 版本 2.24.0 开始,您可以使用字段将属性定义的文件设置为可选。当设置为 且文件缺失时,Compose 会静默忽略该条目。.envenv_filerequiredrequiredfalse.env
    env_file:
      - path: ./default.env
        required: true # default
      - path: ./override.env
        required: false
  • 从 Docker Compose 版本 2.30.0 开始,您可以为 with the attribute 使用替代文件格式。有关更多信息,请参阅格式env_fileformat
  • 可以使用 docker compose run -e 从命令行覆盖文件中的值。.env

使用 docker compose run --env 设置环境变量

与 类似 ,您可以使用 或其简称 临时设置环境变量:docker run --envdocker compose run --envdocker compose run -e

$ docker compose run -e DEBUG=1 web python console.py

其他信息:

  • 你也可以通过不给它一个值来从 shell 或你的环境文件中传递一个变量:

    $ docker compose run -e DEBUG web python console.py
    

容器中变量的值取自运行 Compose 的 shell 中同一变量的值或环境文件。DEBUG

更多资源