在容器环境中设置环境变量
容器的环境除非在服务配置中有明确的条目,否则不会设置。使用 Compose,您可以通过 Compose 文件以两种方式在容器中设置环境变量。
**提示**
不要使用环境变量传递敏感信息(例如密码)到容器中。请改用secrets。
使用 environment
属性
您可以使用 compose.yaml
中的environment
属性直接在容器环境中设置环境变量。
它支持列表语法和映射语法
services:
webapp:
environment:
DEBUG: "true"
等同于
services:
webapp:
environment:
- DEBUG=true
有关如何使用environment
属性的更多示例,请参阅 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.yaml
文件所在位置的。
**重要**
.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 中同名变量的值或环境变量文件。