news 2026/7/3 17:20:34

Docker Compose 部署 Spring Boot 应用 502 Bad Gateway 问题排查与解决

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker Compose 部署 Spring Boot 应用 502 Bad Gateway 问题排查与解决

问题描述

在使用 Docker Compose 部署周报系统后,前端访问登录接口时出现 502 Bad Gateway 错误:

POST http://172.16.xxx.xxx:5173/api/login 502 (Bad Gateway)

前端控制台错误信息:

AxiosError:Request failedwithstatus code502atot(request-BdhJx_rg.js:3:1078)at XMLHttpRequest.E(request-BdhJx_rg.js:3:5798)

问题分析

1. 502 Bad Gateway 错误含义

502 Bad Gateway 表示 Nginx 作为反向代理无法连接到后端服务。常见原因包括:

  • 后端容器未启动或已崩溃
  • 后端服务监听端口配置错误
  • 后端服务启动失败
  • 网络连接问题

2. 排查步骤

第一步:检查容器状态
docker-composeps

所有容器是否都在运行,不应该啊!!!??

第二步:查看后端日志
docker-composelogs backend --tail=100

关键发现

weekly-backend | no main manifest attribute, in app.jar weekly-backend | no main manifest attribute, in app.jar weekly-backend | no main manifest attribute, in app.jar ...

这个错误信息表明:jar 包中缺少主清单属性,导致 Java 无法找到主类来启动应用程序。

为什么?我明明存在该jar包,为什么会出现缺少主清单的app.jar

进一步分析

1. 检查 jar 包清单文件

unzip-p weekly.jar META-INF/MANIFEST.MF

发现的问题

Manifest-Version: 1.0 Created-By: Maven JAR Plugin 3.4.1 Build-Jdk-Spec: 11

啊?为什么清单文件内容不完整,缺少了 Spring Boot 可执行 jar 包所需的关键属性。

2. 正确的清单文件应该包含

Manifest-Version: 1.0 Created-By: Maven JAR Plugin 3.4.1 Build-Jdk-Spec: 11 Main-Class: org.springframework.boot.loader.JarLauncher ← 缺少 Start-Class: com.example.SpringbootApplication ← 缺少 Spring-Boot-Version: 2.6.13 ← 缺少 Spring-Boot-Classes: BOOT-INF/classes/ ← 缺少 Spring-Boot-Lib: BOOT-INF/lib/ ← 缺少

3. 根本原因

检查pom.xml文件发现配置错误:

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.example.Car-endApplication</mainClass>← 主类名称错误<skip>true</skip>← 跳过构建</configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin>

问题分析

  1. 主类名称错误com.example.Car-endApplication应该是com.example.SpringbootApplication
  2. 跳过构建<skip>true</skip>导致打包时跳过了 Spring Boot Maven Plugin 的 repackage 阶段
  3. 结果:生成的是普通 jar 包而不是可执行的 Spring Boot fat jar

如果pom.xml文件没有发现配置错误?那就是IDEA受网络波动影响导致打包一半(作者就是出现这个原因,真的是百思不得其解!气死了)

解决方案

1. 修复 pom.xml 配置

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.example.SpringbootApplication</mainClass></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin>

修改内容

  • 修正主类名称:com.example.Car-endApplicationcom.example.SpringbootApplication
  • 删除跳过构建配置:移除<skip>true</skip>

2. 重新打包项目

在本地开发机器上执行:

cdd:\jiangcaidu\code\周报\Weekly_end# 清理并重新打包mvn clean package -DskipTests

3. 验证打包结果

# 查看 jar 包大小dirtarget\Weekly_end-0.0.1-SNAPSHOT.jar# 查看清单文件jar xf target\Weekly_end-0.0.1-SNAPSHOT.jar META-INF\MANIFEST.MFtypeMETA-INF\MANIFEST.MF

正确的清单文件

Manifest-Version: 1.0 Created-By: Maven JAR Plugin 3.4.1 Build-Jdk-Spec: 11 Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: com.example.SpringbootApplication Spring-Boot-Version: 2.6.13 Spring-Boot-Classes: BOOT-INF/classes/ Spring-Boot-Lib: BOOT-INF/lib/ Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx Spring-Boot-Layers-Index: BOOT-INF/layers.idx

终于是正确了!

jar 包特征

  • 文件大小:50MB - 100MB(包含所有依赖)
  • 清单文件包含Main-ClassStart-Class

4. 接着上传新的 jar 包到服务器

# 在服务器上,备份旧的 jar 包mvweekly.jar weekly.jar.backup# 上传新的 jar 包到这个目录,并重命名为 weekly.jar

5. 重新构建 Docker 镜像

关键步骤:必须重新构建 Docker 镜像,因为 Dockerfile 中的COPY weekly.jar app.jar会在构建时将 jar 包复制到镜像内部。

# 停止并删除旧容器docker-composedown# 重新构建后端镜像(使用新的 jar 包)docker-composebuild backend# 启动服务docker-composeup -d# 查看后端日志docker-composelogs backend -f

6. 验证服务启动成功

后端启动成功后,日志应该显示:

. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.13) ... Started SpringbootApplication in X.XXX seconds (JVM running for X.XXX)

参考资源

  • Spring Boot Maven Plugin 文档
  • Dockerfile 最佳实践
  • Docker Compose 文档
  • Maven 打包指南

如果部署中遇到502 Bad Gateway,觉得有帮助,欢迎点赞收藏!有问题欢迎评论区交流~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 13:24:22

如何通过AI提升数据分析能力

如何通过AI提升数据分析能力关键词&#xff1a;AI、数据分析能力、数据挖掘、机器学习、深度学习、自动化分析、数据洞察摘要&#xff1a;本文旨在探讨如何借助AI技术提升数据分析能力。首先介绍了相关背景&#xff0c;包括目的范围、预期读者等内容。接着阐述了核心概念与联系…

作者头像 李华
网站建设 2026/7/2 12:33:04

springboot基于java的网上拍卖系统文献综述

目录基于Spring Boot的网上拍卖系统文献综述技术架构与框架选择核心功能模块设计安全与风控机制性能优化策略未来研究方向项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作基于Spring Boot的网上拍卖系统文献…

作者头像 李华
网站建设 2026/7/3 12:20:13

<span class=“js_title_inner“>iMeta 讲坛25 | 谢卡斌-水稻与微生物组互作机制(1.29晚7点)</span>

iMeta讲坛 第25期 探索水稻-微生物互作机制&#xff1a; 品种特异性细菌群落偏好及宿主免疫受体激酶共同调节水稻-微生物群落互作 01 报告人简介 谢卡斌 华中农业大学 教授 谢卡斌&#xff0c;华中农业大学植物科学技术学院教授&#xff0c;博士生导师。主要从事水稻微生物互作…

作者头像 李华
网站建设 2026/7/3 15:59:14

HarmonyOS 应用开发实战:高精图像处理与头像裁剪持久化技术深度解析

摘要 在数字化转型中&#xff0c;用户交互界面&#xff08;UI&#xff09;的专业性与数据处理的精确性是应用成败的关键。本文将深入探讨在 HarmonyOS 平台上&#xff0c;如何为一款应用构建高标准的个人中心头像上传与裁剪系统。我们将从底层的 PixelMap 像素级操作讲起&…

作者头像 李华
网站建设 2026/7/3 12:21:08

新疆财经大学完成网站群全链条国产化改造

筑牢教育数字化安全底座近日&#xff0c;新疆财经大学网站群信创改造项目顺利落地&#xff0c;实现从底层运行环境到上层应用系统的全链条国产化替代&#xff0c;完成与国产操作系统、数据库、中间件的深度适配&#xff0c;摆脱国外商业软件依赖&#xff0c;构建起自主可控、安…

作者头像 李华
网站建设 2026/6/26 19:18:46

SSM毕设项目:基于JavaWeb的东北特色农产品电商后台管理系统的设计与开发(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华