Render部署Spring Boot项目遇Docker缓存密钥计算失败问题求助
Render部署Spring Boot项目Docker构建失败排查与解决
问题描述
在Render.com部署Java Spring Boot项目时,Docker构建过程中出现异常,无法定位目标jar包,导致部署失败。
使用的Dockerfile
FROM maven:3-eclipse-temurin-17 AS build COPY . . RUN mvn clean package -Pprod -DskipTests FROM openjdk:11-jdk-slim COPY --from=build /target/backendaccountant-0.0.1-SNAPSHOT.jar demo.jar EXPOSE 8080 ENTRYPOINT [“java”,“-jar”,“demo.jar”]
报错信息
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/guava/guava/28.2-android/guava-28.2-android.jar (2.6 MB at 4.7 MB/s) Aug 15 05:20:00 PM #11 21.07 [INFO] Replacing main artifact /target/QuickMaster-1.0.0.jar with repackaged archive, adding nested dependencies in BOOT-INF/. Aug 15 05:20:00 PM #11 21.08 [INFO] The original artifact has been renamed to /target/QuickMaster-1.0.0.jar.original Aug 15 05:20:00 PM #11 21.08 [INFO] ------------------------------------------------------------------------ Aug 15 05:20:00 PM #11 21.08 [INFO] BUILD SUCCESS Aug 15 05:20:00 PM #11 21.08 [INFO] ------------------------------------------------------------------------ Aug 15 05:20:00 PM #11 21.08 [INFO] Total time: 18.303 s Aug 15 05:20:00 PM #11 21.08 [INFO] Finished at: 2023-08-15T08:20:00Z Aug 15 05:20:00 PM #11 21.08 [INFO] ------------------------------------------------------------------------ Aug 15 05:20:00 PM #11 21.08 [WARNING] The requested profile "prod" could not be activated because it does not exist. Aug 15 05:20:00 PM #11 DONE 21.2s Aug 15 05:20:00 PM Aug 15 05:20:00 PM #12 [stage-1 2/2] COPY --from=build /target/backendaccountant-0.0.1-SNAPSHOT.jar demo.jar Aug 15 05:20:00 PM #12 ERROR: failed to calculate checksum of ref 1tvcyniff9u6m4oki7cytt7fb::xbb9zgmks3mqn1pni9p0gg08s: "/target/backendaccountant-0.0.1-SNAPSHOT.jar": not found Aug 15 05:20:00 PM ------ Aug 15 05:20:00 PM > [stage-1 2/2] COPY --from=build /target/backendaccountant-0.0.1-SNAPSHOT.jar demo.jar: Aug 15 05:20:00 PM ------ Aug 15 05:20:00 PM Dockerfile:5 Aug 15 05:20:00 PM -------------------- Aug 15 05:20:00 PM 3 | RUN mvn clean package -Pprod -DskipTests Aug 15 05:20:00 PM 4 | FROM openjdk:11-jdk-slim Aug 15 05:20:00 PM 5 | >>> COPY --from=build /target/backendaccountant-0.0.1-SNAPSHOT.jar demo.jar Aug 15 05:20:00 PM 6 | EXPOSE 8080 Aug 15 05:20:00 PM 7 | ENTRYPOINT [“java”,“-jar”,“demo.jar”] Aug 15 05:20:00 PM -------------------- Aug 15 05:20:00 PM error: failed to solve: failed to compute cache key: failed to calculate checksum of ref 1tvcyniff9u6m4oki7cytt7fb::xbb9zgmks3mqn1pni9p0gg08s: "/target/backendaccountant-0.0.1-SNAPSHOT.jar": not found Aug 15 05:20:00 PM error: exit status 1
问题分析
- jar包名称不匹配:构建日志明确显示生成的jar包是
QuickMaster-1.0.0.jar,但Dockerfile中尝试复制的是backendaccountant-0.0.1-SNAPSHOT.jar,文件不存在直接导致构建失败。 - 无效Maven Profile:日志警告
The requested profile "prod" could not be activated because it does not exist,说明-Pprod指定的prod环境配置不存在,虽不影响构建成功,但属于冗余无效配置。 - JDK版本不一致:构建阶段使用JDK 17(maven:3-eclipse-temurin-17),运行阶段使用JDK 11(openjdk:11-jdk-slim),跨版本运行可能引发兼容性问题。
- 全角引号错误:ENTRYPOINT中的引号是中文全角格式,会导致容器启动时解析命令失败。
解决步骤
- 修正jar包名称:将Dockerfile中COPY指令的源jar包改为构建实际生成的
QuickMaster-1.0.0.jar。 - 移除无效Profile:删除
mvn clean package命令中的-Pprod参数,或在项目的pom.xml中添加prod环境的Profile配置。 - 统一JDK版本:将运行阶段的基础镜像改为JDK 17,比如
openjdk:17-jdk-slim,保持与构建环境版本一致。 - 修正引号格式:将ENTRYPOINT中的中文全角引号替换为英文半角引号。
修正后的Dockerfile示例
FROM maven:3-eclipse-temurin-17 AS build COPY . . RUN mvn clean package -DskipTests FROM openjdk:17-jdk-slim COPY --from=build /target/QuickMaster-1.0.0.jar demo.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","demo.jar"]
内容的提问来源于stack exchange,提问作者Noriaki Takamizawa
相关产品推荐
相关产品推荐

