在容器环境中设置环境变量
容器的环境变量只有在服务配置中有明确条目时才会设置。使用 Compose 时,您可以通过两种方式在 Compose 文件中为容器设置环境变量。
提示
不要使用环境变量将敏感信息(例如密码)传递到容器中。请改用 secrets。
使用 environment 属性
您可以直接在容器的环境中通过 environment 属性 在您的 compose.yml 中设置环境变量。
它支持列表和映射语法:
services:
webapp:
environment:
DEBUG: "true"等同于
services:
webapp:
environment:
- DEBUG=true请参阅
environment 属性以获取更多使用示例。
附加信息
- 您可以选择不设置值,直接将环境变量从您的 Shell 传递到容器中。其工作方式与
docker run -e VARIABLE ...相同:web: environment: - DEBUG
容器中的 DEBUG 变量的值取自运行 Compose 的 shell 中同名变量的值。请注意,在这种情况下,如果 shell 环境中未设置 DEBUG 变量,则不会发出任何警告。
您还可以利用 插值。在以下示例中,结果与上述类似,但如果
DEBUG变量未在 shell 环境中设置,或未在项目目录中的.env文件中设置,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。 .env文件中的值可以通过使用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 中同名变量的值,或来自环境文件。