全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 5 分钟 ✍️ juanwangdev

环境变量与配置文件

多环境配置是容器化部署的关键,下面介绍 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 查看最终配置

📝 发现内容有误?点击此处直接编辑

← 上一篇 服务依赖与健康检查
下一篇 → Bridge 网络模式
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库