手把手教你:SpringBoot WAR 包部署到 Docker 中的 Tomcat 容器
一、前期准备
本地环境:已安装 JDK、Maven、Docker Desktop
二、新建 Spring Boot 项目
(一)打开新建项目界面
打开 IDEA,点击「File」→「New」→「Project...」。
此时左侧菜单栏会显示多个选项,你会看到 Spring Boot,直接选中它

(二)项目基础信息配置
| 配置项 | 示例值 | 说明 |
|---|---|---|
| Name | DemoSpringBootWar | 项目显示名 |
| Location | E:\JProjects | 项目存储目录 |
| Language | Java | 项目编程语言 |
| Type | Maven | 构建工具 |
| Group | com.wisear | 组织标识(自定义) |
| Artifact | DemoSpringBootWar | 项目名称 |
| Package name | com.wisear.demo | 基础包路径 |
| JDK | 21 | JDK版本 |
| Java Version | 21 | 与 JDK 版本一致 |
| Packaging | War | ✅ 关键:选择 WAR(而非默认 Jar) |
| Configuration | Properties | 配置文件类型 |
完成后点击「Next」。
(三)选择 Spring Boot 版本和依赖
顶部选择 Spring Boot 版本(默认即可)。
下方「Dependencies」(依赖)区域,在弹出的搜索框中输入「依赖名称」,勾选该依赖(这里暂时可以不用其他依赖)。

点击「Create」确认,回到主界面等待项目加载完成。
(四)预览项目关键文件
1.创建完成的项目结构

2. 主启动类代码如下
package com.wisear.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoSpringBootWarApplication {
public static void main(String[] args) {
SpringApplication.run(DemoSpringBootWarApplication.class, args);
}
}
3.ServletInitializer代码如下
package com.wisear.demo;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoSpringBootWarApplication.class);
}
}
ServletInitializer.java是专门适配外部 Servlet 容器(Tomcat)的启动类,它继承了SpringBootServletInitializer并实现了configure方法
4.pom.xml内容如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wisear</groupId>
<artifactId>DemoSpringBootWar</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>DemoSpringBootWar</name>
<description>DemoSpringBootWar</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
三、启动并验证项目
(一)启动项目
在 IDEA 的「Project」面板中,找到主启动类:
- 鼠标右键点击该文件的编辑区域(或文件名);
- 在弹出的菜单中选择:
- 「Run 'DemoSpringBootWarApplication'」

出现以下日志表示启动成功:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v4.0.3)
2026-03-19T14:40:12.511+08:00 INFO 6676 --- [DemoSpringBootWar] [ main] c.w.demo.DemoSpringBootWarApplication : Starting DemoSpringBootWarApplication using Java 21.0.5 with PID 6676 (E:\JProjects\DemoSpringBootWar\target\classes started by Chenzy in E:\JProjects\DemoSpringBootWar)
2026-03-19T14:40:12.513+08:00 INFO 6676 --- [DemoSpringBootWar] [ main] c.w.demo.DemoSpringBootWarApplication : No active profile set, falling back to 1 default profile: "default"
2026-03-19T14:40:13.043+08:00 INFO 6676 --- [DemoSpringBootWar] [ main] o.s.boot.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2026-03-19T14:40:13.053+08:00 INFO 6676 --- [DemoSpringBootWar] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-03-19T14:40:13.053+08:00 INFO 6676 --- [DemoSpringBootWar] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/11.0.18]
2026-03-19T14:40:13.090+08:00 INFO 6676 --- [DemoSpringBootWar] [ main] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 535 ms
2026-03-19T14:40:13.306+08:00 INFO 6676 --- [DemoSpringBootWar] [ main] o.s.boot.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2026-03-19T14:40:13.310+08:00 INFO 6676 --- [DemoSpringBootWar] [ main] c.w.demo.DemoSpringBootWarApplication : Started DemoSpringBootWarApplication in 1.099 seconds (process running for 1.372)
验证完成后,关闭应用,进行后续操作。
(二)添加 Hello World 控制器
package com.wisear.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 处理Hello World GET请求的控制器
*/
@RestController // 等价于@Controller + @ResponseBody,直接返回字符串而非视图
@RequestMapping("/") // 根路径
public class HelloController {
/**
* 处理GET请求:/hello
*
* @return 字符串 "Hello World"
*/
@GetMapping("/hello") // 匹配GET方式的/hello请求
public String helloWorld() {
// 返回Hello World字符串
return "Hello World";
}
}
(三)再次启动项目
启动成功后,打开浏览器,访问
http://localhost:8080/hello
页面返回Hello World,说明本地运行正常。如下图:

验证完成之后,关闭应用,进行后续操作。
四、打包并部署WAR包
(一)打包 WAR 包
在项目根目录执行 Maven 命令,生成 WAR 包(默认输出到target/目录):
# 清理并打包(跳过测试)
mvn clean package -DskipTests
打包成功后,target/目录下会生成DemoSpringBootWar.war(对应 pom.xml 中finalName配置,如果没有定义finalName,将以artifactId+‘-’+version组合成的名称打包)。

(二)编写 Dockerfile
在项目根目录新建Dockerfile文件(无后缀),内容如下:
# 1. 基础镜像:官方Tomcat
FROM tomcat
# 2. 将本地WAR包复制到Tomcat的webapps目录(/usr/local/tomcat/webapps)
COPY target/DemoSpringBootWar.war /usr/local/tomcat/webapps/demo.war
# 3. 暴露Tomcat端口(默认8080)
EXPOSE 8080
说明:COPY target/DemoSpringBootWar.war /usr/local/tomcat/webapps/demo.war,访问路径为http://ip:8080/demo。
(三)构建 Docker 镜像
在项目根目录执行以下命令(demo-tomcat为镜像名称,:v1为版本标签):
docker build -t demo-tomcat:v1 .
参数说明:
-t:指定镜像名称和标签
.:指定 Dockerfile 所在目录(当前目录)
构建成功后,打开Decker Desktop,在Images列表中可以看到生成的镜像(也可以命令行执行docker images查看)

同时在Builds的列表中可以看到记录(每一次执行docker build命令,都会在 Builds 中生成一条记录)。

(四)运行 Docker 容器
# 运行容器(端口映射:主机8080端口 -> 容器8080端口)
docker run -d -p 8080:8080 --name my-demo-tomcat demo-tomcat:v1
参数说明:
-d:后台运行容器
-p 8080:8080:端口映射(主机端口:容器端口)
--name my-demo-tomcat:指定容器名称(自定义)
demo-tomcat:v1:要运行的镜像名称 + 标签
运行成功后,打开Decker Desktop,在Containers列表中可以看到生成的容器(也可以命令行执行docker ps查看。)

(五)验证部署结果
查看容器运行状态(# 若能看到my-demo-tomcat,说明启动成功):
docker ps
访问项目接口(刚刚创建的HelloWorld中的hello接口):
http://localhost:8080/demo/hello

若能正常看到Hello World输出,说明部署成功。
到此从项目创建、项目配置、项目打包到项目部署的整体流程完成。
更多推荐


所有评论(0)