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

执行docker build后target目录缺失,Java项目Docker构建遇问题

问题分析与解决方法

你的Dockerfile采用了多阶段构建,但第二阶段没有正确从build阶段复制构建产物,这是target目录缺失的核心原因:

  1. 第一阶段(build)确实执行了mvn package,生成的target目录存在于build阶段的容器内(路径/usr/src/app/target),但你第二阶段的COPY ./target ./是从本地构建上下文复制文件,而本地如果没提前执行mvn打包,或者没有把build阶段的产物传递过来,自然找不到target目录。

  2. 另外你的ENTRYPOINT写法存在语法问题,会导致脚本无法正确执行。

修改后的完整Dockerfile

FROM maven:3.9.3-amazoncorretto-20 AS build
COPY src /usr/src/app/src
COPY pom.xml /usr/src/app
RUN mvn -f /usr/src/app/pom.xml clean package

FROM amazoncorretto:20-alpine-jdk
# 从build阶段复制构建好的target目录到当前容器
COPY --from=build /usr/src/app/target ./target
COPY entrypoint.sh .
# 使用数组形式定义ENTRYPOINT,避免shell解析错误
ENTRYPOINT ["sh", "entrypoint.sh"]

关键修改说明

  • COPY --from=build:这是多阶段构建的核心指令,用来指定从前面的build阶段复制文件,这样就能把第一阶段打包生成的jar包等产物传递到第二阶段的容器中。
  • 修正ENTRYPOINT写法:Docker的ENTRYPOINT如果用字符串形式,会被当作单个命令执行(相当于sh -c "sh entrypoint.sh"),容易出现解析问题;使用数组形式["sh", "entrypoint.sh"]是标准写法,让Docker直接调用sh并传入entrypoint.sh作为参数。

内容的提问来源于stack exchange,提问作者Itzik.B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 23:27:05