在容器环境中设置环境变量
容器的环境变量在服务配置中没有明确条目之前是不会设置的。使用 Compose,您可以通过两种方式在 Compose 文件中设置容器的环境变量。
提示不要使用环境变量向容器传递敏感信息,如密码。请改用密文。
使用 environment 属性
您可以使用 compose.yaml 中的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.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 中或环境文件中的同名变量的值。