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

Dockerfile构建多模块Maven项目无法解析父POM异常问题求助

问题根因

  • Docker构建上下文默认限制:在子模块(springapp1/springapp2)目录下执行docker build时,上下文默认是当前子模块目录,无法访问上层的父pom.xml,所以COPY ../pom.xml /build/实际没有成功复制到父pom,导致容器内/build目录下根本没有父pom文件
  • 你使用的maven:3.5.2-jdk-8-alpine镜像的JDK版本是8,但是你的父pom和子pom都指定了java.version为11,版本不兼容也会导致构建失败
  • 父pom没有提前安装到Maven本地仓库,子模块构建时无法找到父依赖
  • 原Dockerfile中复制jar的路径错误,子模块构建出的jar包会生成在子模块的target目录,而非根目录的target目录

解决方案

方案1:从项目根目录执行构建(推荐)

  1. 执行构建命令时切换到项目根目录the_project下执行,指定Dockerfile路径即可:
# 构建springapp1镜像
docker build -f springapp1/Dockerfile .
  1. 修改子模块的Dockerfile内容,修复路径、版本、构建逻辑问题:
# 换成JDK11版本的Maven镜像,和项目JDK版本对齐
FROM maven:3.8.6-jdk-11 AS MAVEN_BUILD
# 复制根目录父pom
COPY pom.xml /build/
# 复制当前子模块的pom和源码
COPY springapp1/pom.xml /build/child/
COPY springapp1/src /build/child/src/
# 先安装父pom到本地仓库
WORKDIR /build/
RUN mvn -N install
# 再构建子模块
WORKDIR /build/child/
RUN mvn package

FROM adoptopenjdk:11-jre-hotspot
WORKDIR /app
# 修正jar包路径为子模块target目录
COPY --from=MAVEN_BUILD /build/child/target/app1-0.0.1-SNAPSHOT-jar-with-dependencies.jar /app/
ENTRYPOINT ["java","-Dspring.profiles.active=prod","-jar","app1-0.0.1-SNAPSHOT-jar-with-dependencies.jar"] 

如果使用docker-compose,修改对应服务的build配置即可:

services:
  springapp1:
    build:
      context: ./the_project # 替换为the_project目录的相对/绝对路径
      dockerfile: springapp1/Dockerfile
    # 其余配置省略

方案2:子模块目录下直接构建(适合快速测试场景)

如果一定要在子模块目录下执行构建,可以先在本地执行父pom安装,再修改Dockerfile跳过父pom相对路径检查:

  1. 先在项目根目录执行命令安装父pom到本地仓库:
mvn -N install
  1. 修改子模块Dockerfile:
FROM maven:3.8.6-jdk-11 AS MAVEN_BUILD
COPY ./pom.xml /build/child/
COPY src /build/child/src/
WORKDIR /build/child/
# 构建时忽略父pom相对路径,直接从本地仓库拉取父依赖
RUN mvn package -Dparent.relativePath=""

FROM adoptopenjdk:11-jre-hotspot
WORKDIR /app
COPY --from=MAVEN_BUILD /build/child/target/app1-0.0.1-SNAPSHOT-jar-with-dependencies.jar /app/
ENTRYPOINT ["java","-Dspring.profiles.active=prod","-jar","app1-0.0.1-SNAPSHOT-jar-with-dependencies.jar"] 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:00