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

使用Docker运行Spring Boot War文件时遭遇404错误求助

解决Spring Boot War包在Tomcat Docker容器中404的问题

1. 调整Spring Boot项目适配外部Tomcat

Spring Boot默认用嵌入式容器,要部署到外部Tomcat必须修改启动类:

  • 让启动类继承SpringBootServletInitializer
  • 重写configure方法指定应用入口

代码示例:

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }
}

同时推荐在pom.xml中把嵌入式Tomcat依赖设为provided,避免和外部Tomcat冲突:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

2. 正确打包War包

执行打包命令生成符合外部Tomcat要求的War包:

mvn clean package -DskipTests

确认target目录下生成的test.war结构完整(包含WEB-INF目录)。

3. 优化Docker配置与容器运行

选项一:保留原包名,通过上下文路径访问

Dockerfile可保持原有内容,但要注意访问路径的变化:

FROM tomcat:9.0.85-jdk17-temurin-jammy
EXPOSE 8080
COPY target/test.war /usr/local/tomcat/webapps/test.war
CMD ["catalina.sh", "run"]

构建命令不变:

docker build --no-cache -t test .

运行容器时映射端口:

docker run -d -p 8080:8080 test

此时访问路径需加上War包名作为上下文,比如Hello World接口为/hello,则访问http://localhost:8080/test/hello。

选项二:重命名为ROOT.war,使用根路径访问

如果想和本地Spring Boot运行的路径一致,修改Dockerfile将War包重命名为ROOT.war,Tomcat会将其作为根应用:

FROM tomcat:9.0.85-jdk17-temurin-jammy
EXPOSE 8080
COPY target/test.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh", "run"]

构建运行后,直接访问http://localhost:8080/[你的接口路径]即可。

4. 排查验证

  • 查看容器日志确认部署状态:
docker logs [容器ID]

如果看到Deploying web application archive [/usr/local/tomcat/webapps/test.war]且无报错,说明部署成功。

  • 进入容器检查War包解压情况:
docker exec -it [容器ID] bash
ls /usr/local/tomcat/webapps/

正常情况下能看到和War包同名的解压目录(如test)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:32:23