在Docker容器内构建Maven项目时遇target目录不存在错误求助
Docker构建Maven项目报错排查与解决
错误原因
- Docker多阶段构建中,每个
FROM指令都会启动独立的构建阶段,新阶段默认无法访问前一阶段的文件系统 - 你在第二个阶段执行
COPY target/*.jar app.jar时,Docker会在本地构建上下文目录中查找target文件夹,但该目录要么不存在,要么你实际需要的是builder阶段构建生成的jar包,因此触发"no such file or directory"错误
解决办法
修改Dockerfile,在COPY指令中通过--from=builder指定从builder阶段复制构建产物:
FROM maven:3.8.1-openjdk-17 as builder COPY src /tmp/src/ COPY pom.xml /tmp/ WORKDIR /tmp/ RUN mvn clean install FROM openjdk:17-jre-slim WORKDIR /tmp/app # 从builder阶段的/tmp/target目录复制jar包 COPY --from=builder /tmp/target/*.jar app.jar EXPOSE 8081 ENTRYPOINT ["java","-jar","app.jar"]
额外优化建议
- 第二阶段使用
openjdk:17-jre-slim镜像替代maven镜像,大幅减少最终镜像体积 - 若无需执行测试,可在maven构建命令中添加
-DskipTests参数加快构建速度:RUN mvn clean install -DskipTests
内容的提问来源于stack exchange,提问作者Thiago Salgado
相关产品推荐
相关产品推荐

