使用变量动态管理 Docker Compose 配置文件
- 2025-07-08 18:42:00
- 丁国栋
- 原创 7
Docker Compose 文件可以使用变量来提供更大的灵活性。如果你想快速切换镜像标签以测试多个版本,或者想要根据本地环境调整卷源,则无需每次都编辑 Compose 文件,只需设置在运行时将值插入到 Compose 文件中的变量即可,这个过程 Docker 文档中叫做插值,插值在编程中通常指的是将变量值插入到字符串模板中,以便生成最终的输出。
插值还可用于在运行时将值插入到 Compose 文件中,然后使用该值将变量传递到容器的环境中。例如在 Compose 编排之前先通过预处理 .env 文件来实现控制 compose.yaml 的真实内容。这个功能与 Helm Chart有点相似,可以用 values.yaml 来控制 Kubernetes 清单文件的具体内容。
插值依赖与 compose.yaml
同级目录的 .env
文件。
这个设计主要是用于用变量灵活的控制 Docker Compose 文件。
- 环境变量定义:用于集中定义环境变量,这些变量可以在 docker-compose.yml 中直接引用(如 ${VAR_NAME})或者直接传递给容器内的应用程序。
- 敏感信息管理:避免将密码、API 密钥等硬编码到 docker-compose.yml 中。
- 配置分离:不同环境(开发/生产)可使用不同的 .env 文件,无需修改 docker-compose.yml。
下面是一个简单的示例:
# cat .env TAG=v1.5 # cat compose.yaml services: web: image: "webapp:${TAG}"
当运行 docker compose up
时,Compose 文件中定义的 Web 服务将在 .env 文件中设置的镜像 webapp:v1.5 。当你在 docker-compose.yml 同级目录下创建 .env 文件时,Docker Compose 会自动加载该文件中的所有变量(无需显式声明要引用它)。
可以使用 docker compose config
命令将解析后的应用程序配置打印到终端。
# docker compose config services: web: image: 'webapp:v1.5'参考:https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/
优先级:
- 如果系统环境变量(如 export VAR=value)与 .env 变量同名,系统环境变量优先。
- 可通过 env_file 显式指定其他文件(如
env_file: ./config.env
),但这些变量仅作用于容器内部,而非 docker-compose.yml。
- 每行一个变量,格式为
KEY=VALUE
。 - 注释以 # 开头。
- 不支持嵌套引用(如
VAR1=${VAR2}
在 .env 中无效)。
--env-file
参数指定 docker-compose --env-file ./custom.env up
发表评论