部署NodeJS API至Elastic Beanstalk:如何指定dev/prod的docker-compose文件
在Elastic Beanstalk中根据环境指定docker-compose文件
当然可以,以下是几种实用的实现方式:
方法一:通过环境变量动态切换
设置EB环境变量
在Elastic Beanstalk控制台,分别给开发(dev)和生产(prod)环境添加环境变量COMPOSE_FILE:- dev环境:值设为
docker-compose.dev.yml - prod环境:值设为
docker-compose.prod.yml
- dev环境:值设为
编写启动脚本
在项目根目录创建start.sh脚本,内容如下:#!/bin/bash docker-compose -f $COMPOSE_FILE up -d给脚本添加执行权限:
chmod +x start.sh配置Dockerrun文件
修改Dockerrun.aws.json,指定启动命令为该脚本:{ "AWSEBDockerrunVersion": "1", "Command": "./start.sh" }
方法二:用.ebextensions配置文件区分环境
创建环境专属配置
在项目根目录新建.ebextensions文件夹,分别创建dev.config和prod.config:- dev.config内容:
commands: 01_set_compose_file: command: echo "COMPOSE_FILE=docker-compose.dev.yml" >> /etc/profile container_commands: 01_start_container: command: docker-compose -f $COMPOSE_FILE up -d - prod.config内容:
commands: 01_set_compose_file: command: echo "COMPOSE_FILE=docker-compose.prod.yml" >> /etc/profile container_commands: 01_start_container: command: docker-compose -f $COMPOSE_FILE up -d
- dev.config内容:
部署时对应环境加载对应配置
部署dev环境时,确保部署包中只包含dev.config;部署prod环境时则只包含prod.config。也可以在配置文件中通过Condition判断环境变量,实现单配置文件适配多环境。
方法三:直接在Dockerrun文件中引用环境变量
如果使用EB的Docker Compose平台版本(AWSEBDockerrunVersion: 2),可以直接在Dockerrun.aws.json中动态指定compose文件:
{ "AWSEBDockerrunVersion": "2", "services": [ { "name": "node-api", "dockerComposeFile": "$COMPOSE_FILE" } ] }
同样需要在EB控制台给不同环境设置COMPOSE_FILE变量。
注意事项
- 确保所有docker-compose文件都包含在部署包内,不要被
.gitignore排除 - 本地测试时可以通过
COMPOSE_FILE=docker-compose.prod.yml docker-compose up -d验证脚本逻辑 - 确认EB平台选择支持Docker Compose的版本(如64bit Amazon Linux 2/2023 with Docker)
内容的提问来源于stack exchange,提问作者Bruno Koga
相关产品推荐
相关产品推荐

