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

Java Docker容器非根目录放置Jar无法运行问题求助

问题根源

你在构建阶段犯了一个路径复制的错误:

  • 当构建阶段设置WORKDIR /app后,你执行COPY /src /src,这会把宿主机构建上下文里的src目录复制到容器内的根目录下的/src,而不是/app/src。
  • Maven在/app目录下执行mvn clean package时,找不到预期的src目录(Maven默认项目结构要求源码在当前工作目录下),所以打包出来的app.jar实际上是不包含编译后类文件的无效jar,自然会在运行时抛出ClassNotFoundException。
  • 第二个Dockerfile因为没设置WORKDIR,默认在容器根目录执行,COPY /src /src刚好把源码放到了Maven预期的位置,所以打包正常。
修复方案

修改构建阶段的COPY命令,确保源码被复制到/app/src目录下:

# === Build stage ===
FROM maven:3.9.9-eclipse-temurin-21-alpine AS builder

WORKDIR /app

# 把宿主机的src复制到当前工作目录(/app)下的src
COPY pom.xml ./
COPY src/ src/

RUN mvn clean package -DskipTests

# === Run stage ===
FROM eclipse-temurin:21.0.5_11-jre-alpine-3.21

WORKDIR /app

COPY --from=builder /app/target/*.jar ./app.jar

EXPOSE 9090

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

核心是把COPY /src /src改成COPY src/ src/(或COPY ./src ./src),让源码放到构建阶段工作目录/app下的src子目录,符合Maven默认项目结构,打包出的jar才会包含正确的类文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:56:15