AWS Elastic Beanstalk部署含.ebextensions的Docker Compose压缩包失败问题咨询
我来帮你分析下这个问题~
你当前的场景是:在AWS Elastic Beanstalk上运行基于64位Amazon Linux 2/3.8.1的Docker环境,单独上传docker-compose.yml文件时部署正常,但把该文件和.ebextensions目录放在production文件夹里压缩成production.zip上传时,就会收到错误提示:
Instance deployment: Both 'Dockerfile' and 'Dockerrun.aws.json' are missing in your source bundle. Include at least one of them. The deployment failed.
问题原因
核心在于Elastic Beanstalk的部署包结构检测逻辑:EB会默认在压缩包的根目录中查找Docker相关的核心配置文件(比如docker-compose.yml、Dockerfile或Dockerrun.aws.json)。
你当前的压缩包结构是这样的:
production.zip └── production ├── .ebextensions └── docker-compose.yml
EB扫描压缩包根目录时,只能看到production文件夹,找不到它需要的docker-compose.yml,因此触发了错误提示。而单独上传docker-compose.yml时,文件处于压缩包(或直接上传的文件)的根目录,EB可以正常识别。
解决方法
调整压缩方式即可:
- 进入到
production目录内部,直接选中.ebextensions文件夹和docker-compose.yml这两个内容进行压缩,不要把整个production目录作为压缩对象。
调整后的压缩包结构会变成:
deploy.zip ├── .ebextensions └── docker-compose.yml
这样EB就能在压缩包根目录找到docker-compose.yml,同时也能加载.ebextensions里的日志转发配置,顺利完成部署。
备注:内容来源于stack exchange,提问作者Luke Rayner

