部署Docker项目到AWS Elastic Beanstalk时docker pull maven命令执行失败
问题原因
- 你的Elastic Beanstalk使用的Docker平台版本过旧,不支持Docker多阶段构建语法。旧版EB的部署逻辑会逐行解析Dockerfile的
FROM指令,把FROM后面的所有内容都作为参数传给docker pull命令,导致你写的AS build也被当成了拉取镜像的参数,触发了docker pull参数数量不匹配的报错。 - 本地Windows环境的Docker版本较新,原生支持多阶段构建语法,所以可以正常运行。
解决方案
方案1:升级EB Docker平台版本(推荐)
- 重新创建EB环境时,选择基于Amazon Linux 2的最新版Docker平台,该版本原生支持Docker多阶段构建语法,不需要修改你现有的Dockerfile即可正常部署。
- 你当前选择的application类型负载均衡适配Spring Boot HTTP服务,不需要改为network类型,该配置不是本次部署失败的原因。
方案2:拆分多阶段构建为单阶段(适配旧版平台)
如果暂时无法升级EB平台,可以调整构建逻辑,去掉多阶段语法:
- 本地先在项目根目录执行
mvn clean package命令,打好可执行Jar包 - 修改Dockerfile内容为单阶段构建:
FROM openjdk:8 COPY target/my-project-host-0.0.1-SNAPSHOT.jar /usr/local/lib/my-project.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","/usr/local/lib/my-project.jar"]
- 重新执行
eb create部署即可。
内容的提问来源于stack exchange,提问作者mcool
相关产品推荐
相关产品推荐

