跳转到内容

Windows 上用 CATALINA_BASE 跑多个 Tomcat 实例

核验于 1 分钟阅读

共享一份 Tomcat 安装,创建隔离的 CATALINA_BASE,改端口,并给每个实例注册独立服务。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
26100.33650
版本
Standard / Datacenter
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
页面类型
任务

CATALINA_HOME 是 Tomcat 二进制;CATALINA_BASE 是一个实例的配置、日志、webapps、work。

一份安装跑两个实例:

C:\tomcat\ CATALINA_HOME
C:\tomcat\instances\a CATALINA_BASE
C:\tomcat\instances\b CATALINA_BASE

每个 base 自己的 conf/server.xml,端口不同。

终端窗口
$home = 'C:\tomcat'
$base = 'C:\tomcat\instances\a'
New-Item -ItemType Directory -Force $base\conf,$base\logs,$base\temp,$base\webapps,$base\work | Out-Null
Copy-Item "$home\conf\*" "$base\conf" -Recurse -Force

不要复制 logs/work 内容;建空目录。conf 复制后改。

C:\tomcat\instances\a\conf\server.xml:

<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" />
<Connector port="8009" protocol="AJP/1.3" secretRequired="true" />
</Server>

实例 B 用 8006、8081、8010(不用 AJP 就禁用)。所有端口都要唯一:shutdown、HTTP、AJP、redirect。

终端窗口
set "CATALINA_HOME=C:\tomcat"
set "CATALINA_BASE=C:\tomcat\instances\a"
C:\tomcat\bin\catalina.bat run

服务方式每个 base 单独注册;用不同服务名,别把同一服务注册两次。验证:

终端窗口
Get-CimInstance Win32_Process -Filter "Name='java.exe'" |
Select-Object ProcessId, CommandLine
Invoke-WebRequest http://localhost:8080/ -UseBasicParsing | Select-Object StatusCode
Invoke-WebRequest http://localhost:8081/ -UseBasicParsing | Select-Object StatusCode

命令行里的 -Dcatalina.base=... 证明每个 JVM 用哪个 base。

  • 每个应用放自己的 webapps,或用 context XML 指向外部路径。
  • logs、temp、work 每 base 独立。
  • 除非有意,不共享 JDK;每实例固定 JAVA_HOME(见 Java 多版本)。
  • 一个实例崩不该占另一个的端口/日志。

E1。实验室没有安装 Tomcat;布局和命令是 Server 2025 上待验证的多实例流程。

来源