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

Docker Tomcat镜像部署Spring Boot WAR包失败:出现404错误

解决Spring Boot WAR包部署Tomcat Docker后404的思路

1. 修正Spring Boot WAR打包的核心配置

  • 主类必须继承SpringBootServletInitializer并重写configure方法,否则外部Tomcat无法识别Spring Boot应用:
@SpringBootApplication
public class FeedbackFormApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(FeedbackFormApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(FeedbackFormApplication.class, args);
    }
}
  • 构建文件里要明确打包方式为war,同时排除内置Tomcat依赖(以Maven为例):
<packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 引入Tomcat Servlet API,仅编译阶段生效 -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>8.5.99</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

2. 核对请求路径的上下文根

  • Tomcat默认用WAR包名作为上下文根,你的应用上下文根是feedback-form,所以本地运行的/api/feedback路径,部署后要改为/feedback-form/api/feedback
  • 若想直接用根路径(/),可以把WAR包重命名为ROOT.war,或者在Tomcat的context.xml中添加配置:
<Context path="/" docBase="feedback-form" reloadable="true"/>

3. 排查容器内的应用日志

  • 进入容器查看Spring Boot应用的启动日志,确认是否完成初始化:
docker exec -it tomcat tail -f /usr/local/tomcat/logs/localhost.log
  • 查看Tomcat主日志catalina.out,排查类加载失败、配置错误等异常:
docker exec -it tomcat tail -f /usr/local/tomcat/logs/catalina.out

4. 验证WAR包完整性

  • 本地解压feedback-form.war,检查WEB-INF/classes下是否有完整的编译后class文件,WEB-INF/lib下是否包含所有依赖包
  • 确认WEB-INF/web.xml是否正常生成(Spring Boot会自动生成,若存在手动修改的内容需检查是否有语法错误)

5. 修复Tomcat与JDK的版本兼容问题

  • Tomcat 8最高仅支持JDK 10,而你用的是JDK 17,这是核心兼容性问题。需更换Tomcat镜像为支持JDK 17的版本,修改Dockerfile:
FROM tomcat:10.1-jdk17-temurin-focal

EXPOSE 8080

内容的提问来源于stack exchange,提问作者Luca Pisoni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:03:20