环境变量管理
环境变量是配置应用的重要方式,Docker Compose 提供了多种管理环境变量的方法。
方法一:直接在 Compose 文件中定义
yaml
services:
web:
image: nginx
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://user:pass@db:5432/mydb方法二:使用 .env 文件
创建 .env 文件:
properties
NODE_ENV=production
DATABASE_URL=postgres://user:pass@db:5432/mydb
REDIS_URL=redis://redis:6379在 docker-compose.yml 中引用:
yaml
services:
web:
image: nginx
env_file:
- .env方法三:使用环境变量替换
在 Compose 文件中使用 ${VARIABLE} 语法:
yaml
services:
web:
image: nginx
environment:
- NODE_ENV=${NODE_ENV:-development}
- DATABASE_URL=${DATABASE_URL}${VARIABLE:-default} 表示如果变量不存在,使用默认值。
方法四:多个环境文件
yaml
services:
web:
image: nginx
env_file:
- .env.common
- .env.production后面的文件会覆盖前面的同名变量。
变量优先级
- Compose 文件中的
environment - Shell 环境变量
.env文件- Dockerfile 中的
ENV
安全最佳实践
警告
不要在 Compose 文件中硬编码敏感信息(如密码、密钥)。
使用 Docker Secrets(Swarm 模式)
yaml
version: '3.8'
services:
web:
image: nginx
secrets:
- db_password
environment:
- DB_PASSWORD_FILE=/run/secrets/db_password
secrets:
db_password:
external: true使用外部文件
yaml
services:
web:
image: nginx
env_file:
- .env.secrets # 不提交到版本控制确保 .env.secrets 在 .gitignore 中:
text
.env.secrets
.env.localBSFC Tech Pro Tip
生产环境应该使用密钥管理服务(如 HashiCorp Vault、AWS Secrets Manager)来管理敏感信息。