首页
/ 解决JeecgBoot项目Docker打包失败问题

解决JeecgBoot项目Docker打包失败问题

2025-05-02 09:50:56作者:吴年前Myrtle

背景介绍

在使用JeecgBoot开源项目进行Docker容器化部署时,很多开发者会遇到打包失败的问题。本文将以一个典型错误案例为基础,详细分析问题原因并提供完整的解决方案。

问题现象

开发者在Ubuntu 24系统环境下,使用JDK 1.8和Git 2.43,尝试通过Docker Compose对JeecgBoot项目进行容器化打包时遇到了构建失败。错误信息显示系统无法找到目标jar文件/target/jeecg-system-start-3.7.0.jar

根本原因分析

  1. 缺少Maven构建工具:JeecgBoot是一个基于Java的Spring Boot项目,必须通过Maven或Gradle进行项目构建后才能生成可执行的jar包。错误信息中明确显示系统没有安装Maven。

  2. 构建顺序错误:Docker构建过程直接尝试复制目标jar文件,但在此之前没有执行Maven构建步骤,导致目标文件不存在。

  3. Dockerfile配置问题:Dockerfile中直接引用了未生成的jar文件路径,而没有包含构建步骤。

完整解决方案

1. 安装必要工具

首先需要安装项目构建所需的工具链:

# 安装Maven
sudo apt-get install maven

2. 项目构建流程

正确的项目构建应该遵循以下顺序:

  1. 克隆项目代码
  2. 使用Maven构建项目
  3. 执行Docker构建
# 克隆项目
git clone <项目仓库地址>

# 进入项目目录
cd jeecg-boot

# 使用Maven构建项目
mvn clean package

3. 修改Docker配置

建议对Docker配置进行以下优化:

# 使用多阶段构建
FROM maven:3.6.3-jdk-8 AS build
WORKDIR /app
COPY . .
RUN mvn clean package

FROM anapsix/alpine-java:8_server-jre_unlimited
COPY --from=build /app/jeecg-module-system/jeecg-system-start/target/jeecg-system-start-*.jar /jeecg-boot/jeecg-system-start.jar
WORKDIR /jeecg-boot
EXPOSE 2222
ENTRYPOINT ["java", "-jar", "jeecg-system-start.jar"]

4. 优化docker-compose.yml

services:
  jeecg-boot-system:
    build: .
    restart: on-failure
    container_name: jeecg-boot-system
    ports:
      - 8080:2222
    networks:
      - jeecg_boot

networks:
  jeecg_boot:
    driver: bridge

最佳实践建议

  1. 使用CI/CD流程:建议将构建和部署过程集成到CI/CD流水线中,确保每次代码变更都能自动构建和测试。

  2. 版本管理:在Docker构建过程中使用明确的版本标签,避免使用latest标签。

  3. 资源优化:对于Java应用,可以添加JVM参数优化内存使用:

    ENTRYPOINT ["java", "-Xms256m", "-Xmx512m", "-jar", "jeecg-system-start.jar"]
    
  4. 健康检查:在docker-compose中添加健康检查:

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:2222/actuator/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    

总结

JeecgBoot项目的Docker化部署需要遵循正确的构建顺序,先使用Maven构建项目生成可执行jar,再进行Docker镜像构建。通过本文提供的解决方案和最佳实践,开发者可以顺利完成项目的容器化部署,并为生产环境做好准备。

登录后查看全文

项目优选

收起
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
51
15
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
118
207
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
527
404
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
63
145
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
391
37
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
98
251
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
297
1.02 K
arkanalyzerarkanalyzer
方舟分析器:面向ArkTS语言的静态程序分析框架
TypeScript
42
40
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
357
341
CangjieMagicCangjieMagic
基于仓颉编程语言构建的 LLM Agent 开发框架,其主要特点包括:Agent DSL、支持 MCP 协议,支持模块化调用,支持任务智能规划。
Cangjie
583
41