Spring Boot+Gradle构建Docker镜像运行报错:META-INF/spring.factories无自动配置类
问题根因
- 你当前打包进镜像的是Gradle默认生成的普通jar包,不是Spring Boot插件生成的包含所有依赖、结构正确的可执行fat jar,普通jar里没有自带Spring Boot自动配置相关的
META-INF/spring.factories文件,也没有绑定项目依赖,所以启动报错。 - Dockerfile和Palantir docker插件配置不匹配:插件里已经把jar重命名为
app.jar,但是Dockerfile里写的是添加MoesCrud.jar,文件路径对应错误。
解决方案
步骤1:修正build.gradle的docker配置,指定使用Spring Boot的可执行jar
Spring Boot插件生成的可执行jar对应的任务是bootJar,不是默认的jar,把docker配置块里的jar改为bootJar:
docker { name "crudformoes" dockerfile file('Dockerfile') copySpec.from(bootJar).rename(".*","app.jar") buildArgs(['JAR_FILE': "app.jar"]) }
步骤2:修正Dockerfile配置,和插件输出的文件名对应
FROM openjdk:17.0.1 ADD app.jar app.jar EXPOSE 9090 ENTRYPOINT ["java", "-jar","app.jar"]
步骤3:可选简化方案(无需第三方docker插件)
如果不想使用Palantir docker插件,可以直接使用Spring Boot官方原生的镜像构建能力,直接执行gradle bootBuildImage就能生成符合要求的镜像,添加如下配置即可:
springBoot { buildInfo() } bootBuildImage { imageName = "crudformoes" ports = ["9090"] }
内容的提问来源于stack exchange,提问作者Dennis .VN
相关产品推荐
相关产品推荐

