Docker Compose 环境变量使用指南:动态配置与多环境适配
在使用 Docker Compose 管理容器时,通过环境变量动态设置配置值是一种灵活高效的方式,尤其适合开发、测试、生产等多环境下的配置差异化需求。本文将详细介绍如何在 Docker Compose 中使用环境变量,包括变量来源、配置方法及最佳实践。
一、环境变量在 Docker Compose 中的基本用法
在 Docker Compose 文件(docker-compose.yml)中,可通过 ${VARIABLE_NAME} 格式引用环境变量,这些变量会在运行时被动态替换为实际值。
示例配置:
yaml
version: '3.8'services:
web:
image: "nginx:latest"
ports:
- "${WEB_PORT}:80" # 引用WEB_PORT变量
environment:
- NGINX_HOST=${NGINX_HOST} # 引用NGINX_HOST变量二、环境变量的来源
Docker Compose 运行时会从以下三个来源读取环境变量,优先级从低到高排列:
1. 环境变量文件(.env)
在项目根目录创建 .env 文件,直接定义变量键值对,Docker Compose 会自动加载该文件。
示例 .env 文件:
ini
# .env 文件WEB_PORT=8080NGINX_HOST=example.com
运行 docker-compose up 时,上述变量会自动注入配置,等效于将 WEB_PORT 替换为 8080,NGINX_HOST 替换为 example.com。
2. 系统环境变量
直接在操作系统中设置的环境变量(如 Linux/macOS 的 export 命令),会被 Docker Compose 读取并覆盖 .env 文件中的同名变量。
设置方式(Linux/macOS):
bash
export WEB_PORT=8080export NGINX_HOST=example.com
设置后运行 docker-compose up,系统环境变量的值将生效。
3. 命令行参数
通过命令行直接指定环境变量,优先级最高,会覆盖 .env 文件和系统环境变量中的同名值。
使用方式:
bash
# 临时指定变量值运行WEB_PORT=9090 NGINX_HOST=another-example.com docker-compose up
此命令会将 WEB_PORT 临时设为 9090,NGINX_HOST 设为 another-example.com,仅在当前运行实例中生效。
三、变量未定义时的默认值设置
若引用的环境变量未定义,Docker Compose 会报错。为避免此问题,可在 Compose 文件中为变量设置默认值,格式为 ${VARIABLE_NAME:-默认值}。
示例配置:
yaml
version: '3.8'services:
web:
image: "nginx:latest"
ports:
- "${WEB_PORT:-8080}:80" # 若WEB_PORT未定义,默认使用8080
environment:
- NGINX_HOST=${NGINX_HOST:-default.com} # 若NGINX_HOST未定义,默认使用default.com四、使用注意事项
总结
通过环境变量动态配置 Docker Compose,能极大提升容器部署的灵活性,轻松实现多环境差异化管理。核心要点包括:
合理使用这些技巧,可让 Docker Compose 配置更简洁、维护更高效,适配从开发到生产的全流程部署需求。



