Docker容器中Tomcat部署JavaEE应用出现404错误求助
JavaEE容器化后/login路径404问题排查
问题概述
- MySQL容器运行正常,应用容器日志显示已成功连接数据库
- 访问
http://localhost:8080/可正常加载首页,但访问http://localhost:8080/login时返回404错误,错误提示:The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
- 本地非容器化运行时功能完全正常,且已确认应用容器处于运行状态
排查建议
1. 检查应用上下文路径
容器化部署时,应用服务器(如Tomcat)可能默认使用WAR包名称作为上下文路径。如果你的WAR包名称不是ROOT,那么访问登录页的路径应该是http://localhost:8080/[WAR包名称]/login。可通过查看容器内应用服务器的部署目录,确认WAR包的部署名称。
2. 验证WAR包完整性
对比本地运行的项目文件和容器内部署的WAR包内容,确认login.html(或对应的登录页面资源)、相关Servlet配置文件(如web.xml)是否被正确打包进WAR包。容器化部署时,若打包脚本遗漏了静态资源或配置文件,会导致路径无法匹配。
3. 核对Servlet映射配置
检查登录功能对应的Servlet注解或web.xml中的映射规则:
- 若使用注解,确认是否存在
@WebServlet("/login")或类似的路径映射 - 若使用
web.xml,确认<servlet-mapping>中是否正确配置了/login的映射路径
4. 检查应用服务器配置差异
对比本地和容器中应用服务器(如Tomcat)的版本及核心配置:
- 容器中的服务器是否启用了路径重写、安全限制等规则,导致
/login路径被拦截 - 静态资源的处理配置是否一致,比如容器中是否禁用了直接访问HTML文件的规则
5. 确认端口与路由配置
再次验证容器端口映射命令,确保宿主机器的8080端口正确映射到容器的8080端口,且没有其他进程占用该端口导致请求无法正确转发到应用容器。
内容的提问来源于stack exchange,提问作者Matvey Androsyuk
相关产品推荐
相关产品推荐

