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

部署WAR包至Tomcat9容器后出现Error 404问题求助

排查Docker部署Spring Boot WAR包到Tomcat后404的问题

1. 检查Tomcat容器内WAR包的解压状态

  • 进入运行中的容器:
    docker exec -it test_api sh
    
  • 查看webapps目录下的内容,确认api.war是否被自动解压为api目录:
    ls /usr/local/tomcat/webapps
    
  • 如果未自动解压,检查Tomcat的server.xml中Host节点的配置,确认开启了unpackWARs和autoDeploy:
    <Host name="localhost"  appBase="webapps"
          unpackWARs="true" autoDeploy="true">
    
  • 也可以手动解压WAR包后重启容器尝试:
    cd /usr/local/tomcat/webapps && unzip api.war -d api
    docker restart test_api
    

2. 验证Spring Boot WAR包的配置正确性

  • 确认pom.xml中打包类型为war,并排除内置Tomcat依赖:
    <packaging>war</packaging>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    
  • 检查启动类是否继承SpringBootServletInitializer,这是外部Tomcat部署WAR包的必要条件:
    @SpringBootApplication
    public class ApiApplication extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(ApiApplication.class);
        }
    
        public static void main(String[] args) {
            SpringApplication.run(ApiApplication.class, args);
        }
    }
    

3. 检查Java版本兼容性(最可能的问题)

  • Tomcat 9官方仅支持Java 8至Java 11,你的应用基于Java 19开发,版本不兼容会导致应用无法正常初始化(即使日志显示部署完成)。
  • 查看容器内的Java版本:
    docker exec test_api java -version
    
  • 解决方案:更换为支持Java 19的Tomcat镜像(如Tomcat 10.1.x),修改Dockerfile:
    FROM tomcat:10.1-alpine
    LABEL key="MyName"
    ADD api.war /usr/local/tomcat/webapps/
    EXPOSE 8080
    CMD ["catalina.sh", "run"]
    
  • 重新构建镜像并启动容器:
    docker build -t api .
    docker run -p 80:8080 --name test_api api
    

4. 确认访问路径与Spring Boot上下文配置一致

  • 检查Spring Boot配置文件(application.properties/application.yml)中的上下文路径:
    server.servlet.context-path=/api
    
  • 确保访问路径http://localhost/api与配置的上下文路径匹配,若本地Tomcat的访问路径不同,需统一配置。

5. 查看Tomcat详细日志定位问题

  • 查看容器内Tomcat的请求日志和错误日志,获取404的具体原因:
    docker exec test_api cat /usr/local/tomcat/logs/localhost.log
    docker exec test_api cat /usr/local/tomcat/logs/localhost_access_log.$(date +%Y-%m-%d).txt
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:11:57