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

Docker容器中Tomcat Web应用加载失败:HTTP 404错误排查求助

问题:Docker容器中TomEE服务Web应用404错误排查与解决

环境配置

  • Docker镜像:interesting_picture:latest(4分钟前创建)
  • 容器名称:beautiful_swartz
  • 端口映射:0.0.0.0:8080->8080/tcp
  • 容器内Tomcat目录结构:/usr/local/tomcat/webapps/ROOT/ 包含index.jsp、META-INF、prompt.jsp、result.jsp、WEB-INF
  • 本地Docker目录:包含Dockerfile和应用包ROOT.war
  • 额外信息:
    • Docker版本:Docker version 27.1.1, build 6312585
    • TomEE版本:TomEE 10.1.25
    • 主机系统:macOS Ventura 13.3.1 (22E261)

问题描述

访问http://localhost:8080出现404错误,具体提示:

Type Status Report
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
Apache Tomcat/11.0.0-M24

已尝试操作

  • 确认容器运行正常且端口映射正确
  • 验证文件存在于指定目录
  • 重启Docker容器

排查方向与解决方案

1. 版本不兼容问题

错误提示显示容器内运行的是Apache Tomcat/11.0.0-M24,但你声明使用的是TomEE 10.1.25(基于Tomcat 10)。Tomcat 11的Jakarta EE版本与TomEE 10不匹配,会导致WAR包部署失败。
解决: 检查Dockerfile的基础镜像,确保使用官方TomEE 10镜像,例如apache/tomee:10.1.25-jre17,而非Tomcat镜像。

2. WAR包部署异常

手动复制文件到ROOT目录可能缺失TomEE部署所需的元数据,或WAR包本身损坏导致解压不完整。
解决:

  • 删除容器内/usr/local/tomcat/webapps/ROOT/下的所有文件
  • 将本地ROOT.war复制到容器的/usr/local/tomcat/webapps/目录:docker cp ROOT.war beautiful_swartz:/usr/local/tomcat/webapps/
  • 重启容器,让TomEE自动解压WAR包并部署
  • 查看部署日志确认状态:docker logs beautiful_swartz

3. 文件权限错误

容器内webapps/ROOT/下的文件权限可能不允许TomEE进程读取,导致无法加载资源。
解决:
进入容器调整权限(部分TomEE镜像运行用户为tomcat,需根据实际镜像调整):

docker exec -it beautiful_swartz chmod -R 755 /usr/local/tomcat/webapps/ROOT/
docker exec -it beautiful_swartz chown -R tomcat:tomcat /usr/local/tomcat/webapps/ROOT/

4. 上下文配置缺失

手动创建的ROOT目录可能缺少TomEE认可的上下文配置,导致无法识别为默认应用。
解决:
检查容器内/usr/local/tomcat/conf/Catalina/localhost/ROOT.xml是否存在,若不存在可创建基础配置:

<Context docBase="/usr/local/tomcat/webapps/ROOT" reloadable="true"/>

重启容器生效。

确保自定义JSP正确服务的通用步骤

  1. 确保WAR包结构完整:包含WEB-INF/web.xml(即使使用Servlet 3.0+注解,也建议保留基础配置),JSP文件存放路径符合Web应用规范
  2. 优先使用官方TomEE镜像构建容器,避免自定义镜像时遗漏核心配置
  3. 部署时依赖TomEE自动解压WAR包的机制,而非手动复制文件
  4. 查看容器日志排查部署错误,重点关注JSP编译失败、类加载异常等信息
  5. 验证JSP编译状态:TomEE会将JSP编译为class文件存放在/usr/local/tomcat/work/Catalina/localhost/ROOT/目录,若该目录无对应文件,说明JSP存在语法错误或编译权限问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:45:07