You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker Compose中传递环境变量?

在Docker Compose中为多组件传递环境变量的方法

当你的Docker Compose配置里有多个服务组件需要处理环境变量时,有两种标准方式来统一传递这些变量:

1. 使用默认的.env文件

在Compose文件所在的根目录下创建一个名为.env的文件,所有需要的环境变量按KEY=VALUE的格式写入即可。比如针对你提供的示例配置,.env文件可以这样写:

DB_USER=你的数据库用户名
DB_PASSWORD=你的数据库密码
DB_DATABASE=你的数据库名
DATABASE_TYPE=postgres
DB_HOST=postgres
DB_PORT=5432
SERVER_PORT=80
AWS_S3_ACCESS_KEY=你的AWS访问密钥
AWS_S3_SECRET_ACCESS_KEY=你的AWS密钥密码
AWS_S3_BUCKET=你的S3存储桶名
AWS_S3_REGION=你的AWS区域
PGADMIN_DEFAULT_EMAIL=pgadmin登录邮箱
PGADMIN_DEFAULT_PASSWORD=pgadmin登录密码
PGADMIN_LISTEN_PORT=5400

Docker Compose会自动加载这个文件里的变量,你只需要在Compose配置的environment字段中用${变量名}的形式引用即可。

2. 通过命令行指定环境变量文件

如果不想使用默认的.env文件,也可以通过--env-file选项自定义环境变量文件的路径,比如:

docker-compose --env-file ./config/custom-env up -d

示例Docker Compose配置(中文注释)

version: '3.9'
services:
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - 80:80
      - 443:443
    restart: always
    volumes:
        - ./nginx/nginx.conf:/etc/nginx/nginx.conf
  
  postgres:
    container_name: postgres
    image: postgres:13-alpine
    environment:
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_DB=${DB_DATABASE}
    volumes:
      - ./pgdata:/var/lib/postgresql/data
      - ./database/app.sql:/docker-entrypoint-initdb.d/app.sql
    restart: always
    ports:
      - "35000:5432"
    networks:
      - app_network

  app-api:
    container_name: app-api
    build:
      dockerfile: Dockerfile
      context: ./app-api
      target: production
    environment:
      - DB_TYPE=${DATABASE_TYPE}
      - POSTGRES_HOST=${DB_HOST}
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASS=${DB_PASSWORD}
      - POSTGRES_DB=${DB_DATABASE}
      - POSTGRES_PORT=${DB_PORT}
      - APP_PORT=${SERVER_PORT}
      - NODE_ENV=production  # 注:原配置语法修正,Compose环境变量需用等号而非冒号

      ## AWS相关配置
      - AWS_S3_ACCESS_KEY=${AWS_S3_ACCESS_KEY}
      - AWS_S3_SECRET_ACCESS_KEY=${AWS_S3_SECRET_ACCESS_KEY}
      - AWS_S3_BUCKET=${AWS_S3_BUCKET}
      - AWS_S3_REGION=${AWS_S3_REGION}
    ports:
      - "5050:80"
    volumes: 
      - ./pgadmin-data:/var/lib/pgadmin
    depends_on: 
      - postgres
    links:
      - postgres
    networks:
      - app_network

  pgadmin:
    container_name: pgadmin
    image: dpage/pgadmin4
    restart: always
    environment:
      - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
      - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
      - PGADMIN_LISTEN_PORT=${PGADMIN_LISTEN_PORT}
    ports:
      - "5400:5400"
    depends_on:
      - postgres
    links:
      - postgres
    networks:
      - app_network

内容的提问来源于stack exchange,提问作者kidubo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:25:24