首页/ 学科题库/ docker/ 环境变量与配置文件
docker 实战教程

环境变量与配置文件

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 查看最终配置
想在手机上练这篇的配套题目?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别下方二维码,即可解锁本讲对应真题与错题本。
了解产品 App
← 上一篇 服务依赖与健康检查 下一篇 → Compose 网络与卷