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

构建Spring Boot Docker镜像时复制Jar文件报错求助

Spring Boot Docker镜像构建错误:找不到target目录的解决方法

错误信息

failed to solve: lstat /var/lib/docker/tmp/buildkit-mount188888512/var/www/app/target: no such file or directory

问题原因

你的backend.Dockerfile中,RUN ./mvnw package已经在容器内部生成了target目录和jar包,但后续使用COPY var/www/app/target/*.jar app.jar是错误的——COPY指令的作用是从宿主机(构建上下文)复制文件到容器,而非在容器内部复制文件。宿主机的构建上下文里虽然有target目录,但你写的路径var/www/app/target在宿主机中不存在,因此触发报错。

修复方案

将容器内部复制文件的操作替换为RUN cp指令,修改后的Dockerfile如下:

FROM openjdk:17

WORKDIR /var/www/app

COPY mvnw .
COPY .mvn .mvn
COPY pom.xml .
COPY src src

RUN ./mvnw package -Dmaven.test.skip

EXPOSE 8080

# 使用RUN cp复制容器内生成的jar包到当前目录
RUN cp target/*.jar app.jar

CMD ["java", "-jar", "app.jar"]

额外优化建议

1. 多阶段构建减少镜像体积

通过多阶段构建分离构建环境与运行环境,最终镜像仅包含运行所需的JRE和jar包,可大幅减小镜像体积:

# 第一阶段:构建jar包
FROM openjdk:17 as builder

WORKDIR /var/www/app

COPY mvnw .
COPY .mvn .mvn
COPY pom.xml .
COPY src src

RUN ./mvnw package -Dmaven.test.skip

# 第二阶段:运行应用
FROM openjdk:17-jre-slim

WORKDIR /var/www/app

# 从构建阶段复制生成的jar包
COPY --from=builder /var/www/app/target/*.jar app.jar

EXPOSE 8080

CMD ["java", "-jar", "app.jar"]

2. 确认构建上下文

你的docker-compose.yaml中指定了dockerfile: ./docker/backend.Dockerfile,默认构建上下文是docker-compose.yaml所在的根目录,这与Dockerfile中COPY mvnw .等指令的路径匹配,无需调整。

内容的提问来源于stack exchange,提问作者karixdev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:50:50