Skip to content

环境变量管理

环境变量是配置应用的重要方式,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

后面的文件会覆盖前面的同名变量。

变量优先级

  1. Compose 文件中的 environment
  2. Shell 环境变量
  3. .env 文件
  4. 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.local

BSFC Tech Pro Tip

生产环境应该使用密钥管理服务(如 HashiCorp Vault、AWS Secrets Manager)来管理敏感信息。


由 BSFC Tech 提供技术支持