You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker分层构建Spring Boot应用时遭遇Unable to access jarfile application.jar错误

Docker分层构建Spring Boot应用时遭遇Unable to access jarfile application.jar错误

我来帮你排查这个问题,从你给出的错误日志和Docker配置来看,核心问题大概率是jar包名称不匹配或者Spring Boot的可执行jar包未正确生成,下面是具体的分析和修复步骤:

1. 修正Dockerfile.layered中的jar包名称不匹配问题

从错误日志里能看到,构建时执行的命令是:

java -Djarmode=layertools -jar application.jar extract

但你贴的Dockerfile.layered里,明明是把target下的jar包重命名为了app.jar:

ADD target/*.jar app.jar

这就导致系统找不到application.jar——因为你已经把jar包改成app.jar了呀!

你需要把Dockerfile.layered里的RUN命令修正为和jar包名称一致:

RUN java -Djarmode=layertools -jar app.jar extract

确保这行命令里的jar名和ADD命令里的完全对应。

2. 确认Spring Boot的可执行jar包已生成

如果修正名称后还是报错,那可能是你的target目录下根本没有生成可执行jar包:

  • 如果你用Maven构建,先在项目根目录执行:
    mvn clean package
    
    (多模块项目请用mvn clean install)
  • 如果你用Gradle构建,执行:
    gradle clean bootJar
    
    执行完后去target(Gradle是build/libs)目录看看,确认有带版本号的可执行jar包存在。

3. 避免通配符匹配错误(可选)

如果target目录下有多个jar包(比如原始jar和sources jar),用*.jar通配符可能会匹配到错误的文件,你可以直接指定具体的jar包名称,比如假设你的应用jar是api-gateways-0.0.1-SNAPSHOT.jar,修改ADD命令:

ADD target/api-gateways-0.0.1-SNAPSHOT.jar app.jar

4. 临时排查:验证jar包是否存在

如果还是不确定问题出在哪,可以在Dockerfile.layered的RUN命令前加一行查看目录的命令,确认jar包是否真的被复制到了容器里:

ADD target/*.jar app.jar
RUN ls -l  # 查看当前目录下的文件,确认app.jar存在
RUN java -Djarmode=layertools -jar app.jar extract

重新构建时就能看到目录里的文件列表,判断是否是复制环节出了问题。

备注:内容来源于stack exchange,提问作者Hello There

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:09:05