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

Docker构建执行mvn package报错exit code:1,求技术支持

Maven打包失败(exit code 1)的Docker镜像构建排查方案

问题描述

构建Java项目Docker镜像时,执行mvn package步骤报错退出,日志被截断无法看到具体错误:

#0 992.9 [output clipped, log limit 1MiB reached] failed to solve: executor failed running [/bin/sh -c mvn package]: exit code: 1

已调整Docker Desktop Engine配置,问题仍未解决。使用的Dockerfile代码如下:

FROM maven:3.6.3-jdk-11-slim AS build

WORKDIR usr/src/app

COPY . ./

RUN apt-get update && apt -y upgrade

RUN mvn package

FROM tomcat:8.5-jdk8

ARG JAR_NAME="Builder"

COPY DMClient.properties /usr/local/tomcat/bin
COPY DMLogin.war /usr/local/tomcat/webapps
COPY mssql-jdbc-6.4.0.jre8.jar /usr/local/tomcat/lib
COPY DMClient.xml /usr/local/tomcat/conf/Catalina/localhost/
COPY DMLogin.xml /usr/local/tomcat/conf/Catalina/localhost/
COPY DMLogin.properties /usr/local/tomcat/bin
COPY sqljdbc_auth.dll /opt/java/openjdk/lib
WORKDIR /usr/src/app

ADD /*.war /DMClient.war

COPY --from=build /usr/src/app/target/*.war /usr/local/tomcat/webapps

CMD ["catalina.sh", "run"]

排查步骤

1. 先获取完整的Maven构建日志

日志被截断是核心障碍,先拿到完整错误信息才能定位问题:

  • 构建时添加--progress=plain参数,强制输出未截断的日志:
    docker build --progress=plain -t your-image-tag .
    
  • 也可以直接在本地项目目录执行mvn package,看是否能复现错误,先排除Docker环境外的代码或依赖问题。

2. 修复Dockerfile中的路径错误

  • 构建阶段的WORKDIR usr/src/app缺少根目录斜杠,会在默认根目录/下嵌套创建usr/src/app,导致路径混乱,改为:
    WORKDIR /usr/src/app
    
  • 最终阶段的ADD /*.war /DMClient.war路径错误,/*.war会匹配根目录下的war包,而当前WORKDIR是/usr/src/app,改为ADD *.war /DMClient.war,或者直接删除这一步(因为后面已经从build阶段复制了target下的war包,这步大概率冗余)。

3. 优化Maven构建环境

  • 删掉RUN apt-get update && apt -y upgrade:maven:3.6.3-jdk-11-slim是轻量镜像,系统更新没必要,反而可能破坏现有环境导致构建失败。
  • 检查依赖下载问题:如果项目依赖私有仓库或需要外网访问,构建时可能因网络失败。可以提前在本地执行mvn dependency:go-offline下载依赖,或者在Dockerfile中添加Maven代理配置。
  • 跳过测试快速验证:打包时添加-DskipTests参数,先排除测试用例失败导致的打包问题:
    RUN mvn package -DskipTests
    

4. 检查JDK版本兼容性

构建用的是JDK11,最终运行环境是Tomcat8.5-jdk8(JDK8),如果项目代码使用了JDK11专属特性,后续运行会报错,但当前是打包阶段失败,先确认打包时JDK11环境是否正常编译代码。

5. 优化构建缓存,提前发现依赖问题

调整Dockerfile顺序,先复制pom.xml下载依赖,再复制代码,这样依赖缓存不会因代码修改失效,也能提前排查依赖问题:

FROM maven:3.6.3-jdk-11-slim AS build
WORKDIR /usr/src/app
# 先复制pom.xml下载依赖
COPY pom.xml ./
RUN mvn dependency:go-offline
# 再复制所有代码
COPY . ./
RUN mvn package -DskipTests

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:57:43