Windows 上用 CATALINA_BASE 跑多个 Tomcat 实例
共享一份 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_HOMEC:\tomcat\instances\a CATALINA_BASEC:\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-NullCopy-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, CommandLineInvoke-WebRequest http://localhost:8080/ -UseBasicParsing | Select-Object StatusCodeInvoke-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 上待验证的多实例流程。