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

在服务配置中没有明确的条目之前,不会设置容器的环境。使用Compose,您可以通过Compose文件以两种方式在容器中设置环境变量。

提示

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

使用environment属性

您可以使用compose.yml文件中的environment属性直接在容器的环境中设置环境变量。

它支持列表和映射语法

services:
  webapp:
    environment:
      DEBUG: "true"

等同于

services:
  webapp:
    environment:
      - DEBUG=true

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

附加信息

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

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

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

    web:
      environment:
        - DEBUG=${DEBUG}

使用env_file属性

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

services:
  webapp:
    env_file: "webapp.env"

使用.env文件,您可以使用相同的文件用于普通的docker run --env-file ...命令,或者在多个服务中共享相同的.env文件,而无需复制冗长的environment YAML 块。

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

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

env_file属性中指定的.env文件的路径相对于您的compose.yml文件的位置。

重要

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

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

附加信息

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

使用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中的相同变量的值或环境文件。

更多资源