如何在Render.com用Gradle构建SpringBoot?Docker构建步骤未执行报错
问题分析与解决
问题根源
你的Dockerfile采用了多阶段构建,但runtime阶段直接尝试添加build/libs/docker-0.0.1-SNAPSHOT.jar,而多阶段构建的各个阶段是完全隔离的——builder阶段生成的jar包仅存在于该阶段的容器环境中,runtime阶段无法直接访问当前构建上下文外的文件,因此会报错找不到目标jar包。
修复方案
修改Dockerfile,在runtime阶段使用COPY --from=builder命令,显式从builder阶段复制构建好的jar包:
# # Build stage # FROM gradle:jdk17-jammy AS builder COPY . . RUN gradle build # # Package stage # FROM eclipse-temurin:17-jdk-jammy as runtime EXPOSE 8080 # 从builder阶段复制生成的jar包到当前阶段 COPY --from=builder /home/gradle/build/libs/docker-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
关键说明
gradle:jdk17-jammy镜像的默认工作目录是/home/gradle,因此gradle build生成的jar包完整路径为/home/gradle/build/libs/,复制时需要写全路径。- 如果你的项目Gradle配置生成的jar包名称或路径有变化,需要对应调整复制路径。
额外验证建议
- 构建镜像前,可先在本地执行
gradle build,确认build/libs/目录下是否生成了正确的jar包,避免因项目构建失败导致文件缺失。 - 检查
.dockerignore文件,确保没有错误忽略build目录(多阶段构建中builder阶段会重新复制代码构建,这不是核心问题,但本地调试时需注意)。
内容的提问来源于stack exchange,提问作者hezf
相关产品推荐
相关产品推荐

