Docker构建Java应用报错:Maven命令未找到(exit code:127)
Maven构建Docker镜像失败:找不到mvn命令的解决方法
问题场景
尝试用Maven为Java应用构建Docker镜像,Dockerfile内容如下:
# Build stage FROM eclipse-temurin:21 AS build WORKDIR /app COPY pom.xml . COPY src ./src #mvn clean package -DskipTests # Runtime stage FROM eclipse-temurin:21 WORKDIR /app COPY --from=build /app/target/uprightcleaningservices-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
执行镜像构建时触发错误:
ERROR: failed to solve: process "/bin/sh -c mvn clean package -DskipTests" did not complete successfully: exit code: 127
相关背景:
- 本地执行
mvn clean package -DskipTests可正常完成项目构建,target目录路径正确 - 构建、运行阶段均采用
eclipse-temurin:21作为基础镜像 - 错误根源为构建容器内未安装Maven,无法识别
mvn命令
解决方法
方法1:使用自带Maven的基础镜像(推荐)
将构建阶段的eclipse-temurin:21替换为集成了Maven和对应JDK的官方镜像,比如maven:3.9-eclipse-temurin-21,修改后的Dockerfile如下:
# Build stage FROM maven:3.9-eclipse-temurin-21 AS build WORKDIR /app COPY pom.xml . COPY src ./src RUN mvn clean package -DskipTests # Runtime stage FROM eclipse-temurin:21 WORKDIR /app COPY --from=build /app/target/uprightcleaningservices-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
注意:选择maven镜像时需保证其JDK版本与运行阶段一致,避免出现兼容性问题
方法2:在构建阶段手动安装Maven
若坚持使用eclipse-temurin:21作为构建基础镜像,可在构建阶段添加Maven安装步骤:
# Build stage FROM eclipse-temurin:21 AS build WORKDIR /app # 安装Maven及依赖 RUN apt-get update && apt-get install -y maven COPY pom.xml . COPY src ./src RUN mvn clean package -DskipTests # Runtime stage FROM eclipse-temurin:21 WORKDIR /app COPY --from=build /app/target/uprightcleaningservices-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
此方式会增加镜像构建时间,仅在无法使用maven官方镜像时采用
内容的提问来源于stack exchange,提问作者LordPhantom
相关产品推荐
相关产品推荐

