如何使用Maven通过Dockerfile运行Java代码?构建运行报错如何解决?
问题错误点
- Dockerfile路径配置错误:构建完成后jar包的存储路径和运行命令中引用的路径不一致,导致启动时找不到可执行jar文件。
- Maven打包配置缺失:pom.xml未指定主类全限定名,打包生成的jar包无主清单属性,执行
java -jar命令时会抛出找不到主类的异常。 - 镜像构建逻辑不合理:未使用多阶段构建的情况下,要么最终镜像冗余携带Maven环境,要么精简运行镜像未安装对应版本的JRE/JDK,无法正常运行Java程序。
修复步骤
- 修正pom.xml配置,在build的plugins节点下添加maven-jar-plugin配置,指定启动主类:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <!-- 替换为实际的主类全限定名 --> <mainClass>com.yourpackage.YourMainClass</mainClass> </manifest> </archive> </configuration> </plugin>
- 使用多阶段构建逻辑编写Dockerfile,兼顾镜像大小和路径正确性:
# 构建阶段:使用Maven官方镜像完成代码编译打包 FROM maven:3.8-openjdk-11 AS builder WORKDIR /build # 提前复制pom.xml做依赖缓存,提升后续构建速度 COPY pom.xml . RUN mvn dependency:go-offline # 复制源码执行打包 COPY src ./src RUN mvn package -Dmaven.test.skip=true # 运行阶段:使用精简JRE镜像作为运行环境 FROM openjdk:11-jre-slim WORKDIR /app # 从构建阶段复制生成的jar包到运行目录 COPY --from=builder /build/target/*.jar ./app.jar # 配置启动命令 ENTRYPOINT ["java", "-jar", "app.jar"]
- 执行构建和运行命令即可:
# 构建镜像 docker build -t java-demo . # 启动容器 docker run java-demo
内容的提问来源于stack exchange,提问作者Nadia
相关产品推荐
相关产品推荐

