使用Docker在Render部署Spring Boot应用遇lstat文件不存在错误
解决Docker部署Spring Boot到Render时的target目录不存在错误
错误原因
这个lstat /home/user/.local/tmp/buildkit-mount619141597/target: no such file or directory错误的核心问题是maven构建阶段的target目录路径不对。在maven-builder阶段,你把pom.xml放到了/app目录,执行mvn package时,构建产物会生成在/app/target下,而非镜像根目录的/target。但后续COPY步骤里你写的是target/*.jar,Docker会去根目录查找该目录,自然找不到。
修正后的Dockerfile
FROM maven:3.8.4-openjdk-17 as maven-builder # 先复制pom.xml,利用Docker缓存优化构建速度 COPY pom.xml /app/ COPY src /app/src/ # 切换到/app目录执行构建,确保target生成在正确路径 RUN cd /app && mvn clean package -DskipTests FROM openjdk:17-alpine # 从构建阶段的正确路径复制jar包 COPY --from=maven-builder /app/target/*.jar /app-service/godelivery.jar WORKDIR /app-service EXPOSE 8080 ENTRYPOINT ["java","-jar","godelivery.jar"]
关键调整说明
- 修正COPY路径:将
COPY --from=maven-builder target/*.jar改为/app/target/*.jar,指向maven实际生成产物的目录。 - 优化构建缓存:先复制pom.xml再复制src目录,这样当pom.xml未修改时,maven依赖下载的镜像层会被缓存,加快后续构建速度。
- 移除无用命令:原Dockerfile中的
RUN "ls"对构建无实际帮助,还会增加镜像层数,建议删除。
额外注意点
- 确认项目根目录下确实存在
pom.xml和src目录,Render平台拉取代码时能正确获取到这些文件。 - 如果Spring Boot项目打包后的jar包名称不是默认格式,可以明确指定文件名(比如
/app/target/your-app-name-*.jar),避免匹配错误。
内容的提问来源于stack exchange,提问作者Armando Microsse
相关产品推荐
相关产品推荐

