如何在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
相关产品推荐
相关产品推荐

