环境变量与配置文件
多环境配置是容器化部署的关键,下面介绍 Docker 环境变量管理方法。
三种方式
1. 直接在 compose.yml 中设置
YAML
services:
app:
environment:
- NODE_ENV=production
- DB_HOST=db
- DB_PORT=5432
2. 使用 .env 文件
YAML
services:
app:
environment:
- NODE_ENV=${NODE_ENV:-production}
- DB_HOST=${DB_HOST:-db}
.env 文件:
YAML
NODE_ENV=production
DB_HOST=db
DB_PORT=5432
DB_PASSWORD=secret123
.env文件自动加载,${VAR:-default}支持默认值。
3. 使用 env_file
YAML
services:
app:
env_file:
- .env.production
.env 文件位置
Bash
项目结构:
project/
├── docker-compose.yml
├── .env # Compose 自动加载(仅变量替换)
└── services/
├── app/
│ └── .env # env_file 指定加载(传入容器)
└── db/
└── .env.db
Compose 目录的
.env用于变量替换(${VAR}),env_file指定的文件传入容器环境变量。
多环境配置
YAML
# docker-compose.yml(基础)
services:
app:
build: .
env_file:
- .env.${ENV:-development}
# 使用
ENV=production docker compose up -d
文件:
.env.development.env.staging.env.production
覆盖配置
YAML
# 使用多个 Compose 文件
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
docker-compose.yml:
YAML
services:
app:
build: .
environment:
NODE_ENV: development
docker-compose.prod.yml:
YAML
services:
app:
image: my-app:prod
environment:
NODE_ENV: production
敏感信息管理
不要硬编码
Bash
# 错误做法
services:
app:
environment:
DB_PASSWORD: mypassword123 # 暴露在 YAML 中
使用环境变量
YAML
services:
app:
environment:
DB_PASSWORD: ${DB_PASSWORD}
Bash
# 从环境变量传入
DB_PASSWORD=secret123 docker compose up -d
使用 Docker Secrets(Swarm 模式)
text
services:
app:
environment:
DB_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
secrets:
db_password:
file: ./secrets/db_password.txt
查看环境变量
text
# 查看容器环境变量
docker compose exec app env
# 查看 Compose 变量替换
docker compose config
要点总结
- 三种方式:直接设置、.env 文件、env_file 文件
- .env 用于 Compose 变量替换,env_file 传入容器环境变量
- 多环境使用
.env.${ENV}或 Compose 文件覆盖 - 敏感信息通过环境变量传入,不要硬编码在 YAML 中
docker compose config查看最终配置
📝 发现内容有误?点击此处直接编辑