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

如何在Tomcat容器中运行.jar文件?Docker部署404问题求助

解决Tomcat容器中部署maven-wrapper.jar出现404的问题

兄弟,你这里的核心问题找错了——maven-wrapper.jar根本不是你的Spring Boot应用程序包,它只是一个用来帮你在未安装Maven的环境下执行Maven命令的工具,把它放到Tomcat里当然跑不起来啦!我来帮你梳理清楚正确的做法:

场景一:直接运行Spring Boot内嵌Tomcat的Jar包

Spring Initializr生成的项目默认是内嵌Tomcat的Jar包,这种情况下完全不需要依赖外部Tomcat容器,直接运行Jar就行,步骤如下:

  1. 打包出真正的应用Jar:在项目根目录下执行./mvnw package(Windows系统用mvnw.cmd package),打包完成后,target目录下会生成类似your-project-name-0.0.1-SNAPSHOT.jar的文件,这才是你的应用程序包。
  2. 编写正确的Dockerfile:
FROM openjdk:8-jdk-alpine
LABEL maintainer="deepak@softwareyoga.com"
# 复制你的应用Jar到容器内
COPY target/your-project-name-0.0.1-SNAPSHOT.jar /app.jar
EXPOSE 8080
# 启动应用
CMD ["java", "-jar", "/app.jar"]
  1. 构建并运行容器:
    • 构建镜像:docker build -t spring-boot-app .
    • 运行容器:docker run -it -p 8081:8080 spring-boot-app
      之后访问http://localhost:8081就能看到你的Spring Boot应用了。

场景二:部署到外部Tomcat容器(生成War包)

如果你一定要用外部Tomcat来部署,需要把Spring Boot项目改成War包格式,步骤如下:

  1. 修改pom.xml配置:
    • 将<packaging>jar</packaging>改为<packaging>war</packaging>
    • 添加Tomcat依赖排除(避免和外部Tomcat冲突),并引入Servlet API依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
  1. 修改启动类:让启动类继承SpringBootServletInitializer并重写configure方法:
@SpringBootApplication
public class YourApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}
  1. 打包War包:执行./mvnw package,target目录下会生成your-project-name-0.0.1-SNAPSHOT.war。
  2. 修改Dockerfile:
FROM tomcat:8.0-alpine
LABEL maintainer="deepak@softwareyoga.com"
# 复制War包到Tomcat的webapps目录,Tomcat会自动解压部署
ADD target/your-project-name-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/your-app.war
EXPOSE 8080
CMD ["catalina.sh", "run"]
  1. 构建运行容器:
    • 构建镜像:docker build -t tomcat-spring-app .
    • 运行容器:docker run -it -p 8081:8080 tomcat-spring-app
      之后访问http://localhost:8081/your-app就能看到你的应用了(路径对应War包的名称)。

为什么原来的方法会返回404?

Tomcat识别Web应用需要特定的目录结构(比如WEB-INF文件夹、web.xml配置等),而maven-wrapper.jar只是Maven的工具包,完全不具备Web应用的结构,所以Tomcat不会把它当作Web应用来处理,访问自然会返回404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:35:04