本地正常运行的Kotlin JWT认证应用Docker部署报No main manifest attribute错误
问题原因及解决办法
你的问题出在Dockerfile的两个关键错误上:
文件名不匹配:你通过
ADD命令将/target/application-SNAPSHOT.jar.original重命名为application.jar,但ENTRYPOINT里却指定运行forum.jar——容器里根本没有这个文件,这是直接的运行错误。选了未包含主清单的原始jar:
application-SNAPSHOT.jar.original是Maven插件(比如Spring Boot Maven Plugin)处理前的原始jar包,这个jar的META-INF/MANIFEST.MF里没有配置Main-Class属性,所以用java -jar执行时会提示"No main manifest attribute"。你本地运行正常,是因为你实际跑的是插件处理后的完整jar(通常是不带.original后缀的application-SNAPSHOT.jar)。
修正后的Dockerfile示例:
FROM chainguard/jdk-lts EXPOSE 8080 # 复制Maven插件处理后的完整jar包 ADD /target/application-SNAPSHOT.jar application.jar # 运行正确的jar文件名 ENTRYPOINT ["java", "-jar", "application.jar"]
额外验证步骤:
- 先在本地执行
java -jar target/application-SNAPSHOT.jar确认能正常启动,而java -jar target/application-SNAPSHOT.jar.original会出现和容器里一样的报错,以此验证jar包的正确性。 - 构建镜像时,确保Docker命令的执行目录能访问到
target目录(即项目根目录),避免找不到jar包的问题。
内容的提问来源于stack exchange,提问作者Douglas Martins Santos
相关产品推荐
相关产品推荐

