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

Spring Boot项目war包部署Tomcat Docker容器所有请求返回404如何解决

问题原因与解决方案

1. 修正错误的web.xml配置

你将Tomcat默认web.xml中default servlet的url-pattern修改为/*是核心错误配置:

  • default servlet的作用是处理静态资源请求,/*的优先级高于Spring MVC的DispatcherServlet,会拦截所有业务请求,根本不会流转到你的Spring Boot应用
  • 解决方案:将该配置改回默认值<url-pattern>/</url-pattern>,或直接删除你本地修改的web.xml,使用Tomcat镜像自带的默认配置,启动容器时去掉-v /Users/sachintiwari/Desktop/web.xml:/usr/local/tomcat/conf/web.xml挂载参数。

2. 确认访问路径匹配上下文路径

Tomcat会自动将webapps目录下的war包解压为与war包同名的上下文目录,比如你的war包名为demo.war,则所有请求需要加上上下文路径前缀/demo,例如:

错误访问路径:http://localhost:8080/api/xxx
正确访问路径:http://localhost:8080/demo/api/xxx

如果需要根路径直接访问,在Dockerfile中COPY war包时重命名为ROOT.war即可:

COPY target/*.war /usr/local/tomcat/webapps/ROOT.war

3. 修正Tomcat版本兼容性问题

你使用的Spring Boot 2.2.1.RELEASE默认适配Servlet 4.0规范,而tomcat:8镜像最高支持Servlet 3.1,存在版本兼容风险,建议将基础镜像替换为适配Java 8的Tomcat 9版本:

FROM tomcat:9-jre8

4. 排查应用启动异常

进入运行中的容器检查日志确认Spring Boot是否正常启动:

  1. 执行docker ps获取容器ID
  2. 进入容器查看启动日志:docker exec -it [容器ID] cat /usr/local/tomcat/logs/catalina.out
  3. 检查是否存在Spring Boot启动报错(比如数据源连接失败、配置项缺失等),如果应用启动失败自然所有请求返回404。

5. 确认配置项一致

检查你local环境的配置文件中是否配置了server.servlet.context-path,如果有自定义上下文路径,访问请求需要加上对应前缀。


内容的提问来源于stack exchange,提问作者Sachin Tiwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:45:01