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

通过Docker将WAR包部署到Tomcat后访问接口返回404问题咨询

问题原因及解决方案

核心原因1:Web应用上下文路径不匹配

你将WAR包命名为demo-0.0.1-SNAPSHOT.war放入Tomcat的webapps目录下时,Tomcat默认会用WAR包的文件名作为该应用的上下文路径,也就是说你的接口实际可访问路径是http://localhost:8080/demo-0.0.1-SNAPSHOT/hello,而非直接访问/hello。

对应解决方法:

  • 方式1:访问接口时加上上下文前缀,直接访问http://localhost:8080/demo-0.0.1-SNAPSHOT/hello
  • 方式2:构建镜像时将WAR包重命名为ROOT.war再复制到webapps目录,修改Dockerfile对应行为:
COPY demo-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war

修改后应用的上下文路径就是根路径/,可直接访问/hello。


核心原因2:Tomcat版本与Spring Boot版本不兼容

你使用的Tomcat 10基于Jakarta EE规范,所有Servlet相关的包名已从javax.servlet.*改为jakarta.servlet.*,而常规的Spring Boot 2.x版本仍使用javax.servlet.*的包依赖,两者完全不兼容。这种情况会出现Tomcat日志显示部署成功,但所有请求都无法进入Spring MVC的调度逻辑,直接返回404。

对应解决方法:

  • 方式1:将基础镜像替换为Tomcat 9版本,修改Dockerfile的基础镜像行为:
FROM tomcat:9-jdk8
  • 方式2:将你的Spring Boot应用升级到3.x版本,适配Jakarta EE规范,即可正常在Tomcat 10上运行。

完成对应修改后,重新构建Docker镜像、启动容器即可正常访问接口。

内容的提问来源于stack exchange,提问作者E.T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 06:45:03