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

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

提示

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

使用environment属性

您可以直接在容器的环境中使用environment属性compose.yml.

它支持 list 和 mapping 语法:

services:
  webapp:
    environment:
      DEBUG: "true"

等效于

services:
  webapp:
    environment:
      - DEBUG=true

environment属性,了解有关如何使用它的更多示例。

其他信息:

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

DEBUG变量取自运行 Compose 的 shell 中相同变量的值。请注意,在这种情况下,如果DEBUG变量。

  • 您还可以利用插值。在以下示例中,结果与上面的结果类似,但 Compose 会在DEBUG变量未在 shell 环境或.env文件。

    web:
      environment:
        - DEBUG=${DEBUG}

使用env_file属性

容器的环境也可以使用.env文件以及env_file属性.

services:
  webapp:
    env_file: "webapp.env"

使用.envfile 允许您使用相同的文件供普通docker run --env-file ...命令或共享相同的.env文件,而无需复制长environmentYAML 块。

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

env_file属性还允许您使用多个.env文件。

通往.env文件中,在env_file属性,它们相对于compose.yml文件。

重要

插值.envfiles 是 Docker Compose CLI 的一项功能。

运行时不支持docker run --env-file ....

其他信息:

  • 如果指定了多个文件,则按顺序计算这些文件,并且可以覆盖在先前文件中设置的值。
  • 从 Docker Compose 版本 2.24.0 开始,您可以将.env文件,由env_file属性,通过使用required田。什么时候required设置为false.env文件缺失,则 Compose 会静默忽略该条目。
    env_file:
      - path: ./default.env
        required: true # default
      - path: ./override.env
        required: false
  • 从 Docker Compose 版本 2.30.0 开始,您可以为env_file使用format属性。有关更多信息,请参阅format.
  • .envfile 可以从命令行使用docker compose run -e.

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

docker run --env中,您可以使用docker compose run --env或其简称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 的 shell 中同一变量的值或环境文件。

更多资源