在容器的环境中设置环境变量
在服务配置中有一个显式条目来实现此目的之前,不会设置容器的环境。借助 Compose,您可以通过两种方式使用 Compose 文件在容器中设置环境变量。
提示
不要使用环境变量将敏感信息(如密码)传递到容器中。请改用 secrets。
使用 environment
属性
您可以使用 .
compose.yml
它支持 list 和 mapping 语法:
services:
webapp:
environment:
DEBUG: "true"
等效于
services:
webapp:
environment:
- DEBUG=true
有关如何使用它的更多示例,请参阅 environment
属性。
其他信息:
- 您可以选择不设置值,并将环境变量从 shell 直接传递到容器。它的工作方式与以下相同:
docker run -e VARIABLE ...
web: environment: - DEBUG
容器中变量的值取自运行 Compose 的 shell 中同一变量的值。请注意,在这种情况下,如果未设置 shell 环境中的变量,则不会发出警告。DEBUG
DEBUG
您还可以利用插值。在以下示例中,结果与上述结果类似,但如果未在 shell 环境或项目目录中的文件中设置变量,Compose 会向您发出警告。
DEBUG
.env
web: environment: - DEBUG=${DEBUG}
使用 env_file
属性
还可以使用 .env
文件和 env_file
属性设置容器的环境。
services:
webapp:
env_file: "webapp.env"
使用文件允许您使用同一文件供普通命令使用,或者在多个服务中共享同一文件,而无需复制较长的 YAML 块。.env
docker run --env-file ...
.env
environment
它还可以帮助您将环境变量与主配置文件分开,从而提供更有条理和安全的方式来管理敏感信息,因为您不需要将文件放在项目目录的根目录中。.env
env_file
属性还允许您在 Compose 应用程序中使用多个文件。.env
在属性中指定的文件路径是相对于文件位置的。.env
env_file
compose.yml
重要
文件中的插值是 Docker Compose CLI 的一项功能。
.env
运行 .
docker run --env-file ...
其他信息:
- 如果指定了多个文件,则按顺序计算这些文件,并且可以覆盖在先前文件中设置的值。
- 从 Docker Compose 版本 2.24.0 开始,您可以使用字段将属性定义的文件设置为可选。当设置为 且文件缺失时,Compose 会静默忽略该条目。
.env
env_file
required
required
false
.env
env_file: - path: ./default.env required: true # default - path: ./override.env required: false
- 从 Docker Compose 版本 2.30.0 开始,您可以为 with the attribute 使用替代文件格式。有关更多信息,请参阅
格式
。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
容器中变量的值取自运行 Compose 的 shell 中同一变量的值或环境文件。DEBUG