apache本身不运行java web应用,需通过反向代理协同tomcat;容器化部署需分别挂载:apache的代理配置与ssl证书、tomcat的webapps/logs/conf目录,并通过自定义网络与ajp/http协议打通通信。

Apache 本身不直接运行 Java Web 应用(如 WAR 包),它需要通过反向代理(如 mod_proxy_ajp 或 mod_proxy_http)把请求转发给后端 Tomcat、Jetty 等 Java 容器。所以“Apache 中 Java Web 部署”的容器化,本质是 Apache + Java 应用服务器 的协同部署,挂载重点不在 Apache 自身跑 Java,而在于:
✅ Apache 要能正确代理请求(需配置挂载)
✅ Java 应用服务器(如 Tomcat)要能加载应用、写日志、读配置(需独立挂载)
✅ 两者间通信路径与权限要通
下面分三块说清楚怎么挂载才不踩坑:
Apache 容器需挂载的目录(代理层)
Apache 在这里只做前端网关,挂载目标很明确:
-
虚拟主机配置文件(如
proxy.conf):放在/usr/local/apache2/conf/extra/下,并确保主配置中启用了IncludeOptional conf/extra/*.conf -
SSL 证书与密钥(如有 HTTPS):挂载到
/usr/local/apache2/conf/ssl/,并在配置中严格匹配SSLCertificateFile和SSLCertificateKeyFile路径 -
不挂载网站根目录(DocumentRoot):Java 应用内容由 Tomcat 提供,Apache 的
DocumentRoot可设为/dev/null或一个空目录,避免误暴露静态资源
示例启动命令:
docker run -d \ -p 80:80 -p 443:443 \ -v $(pwd)/conf/proxy.conf:/usr/local/apache2/conf/extra/proxy.conf \ -v $(pwd)/ssl/fullchain.pem:/usr/local/apache2/conf/ssl/fullchain.pem \ -v $(pwd)/ssl/privkey.pem:/usr/local/apache2/conf/ssl/privkey.pem \ httpd:2.4
Tomcat 容器需挂载的核心目录(应用层)
Tomcat 才真正承载 Java Web 应用,挂载必须覆盖三类路径:
-
Web 应用(WAR 或解压目录):挂载到
/usr/local/tomcat/webapps/,支持热更新(如挂载单个myapp.war或整个myapp/目录) -
日志目录:挂载
/usr/local/tomcat/logs到宿主机,便于排查启动失败、HTTP 请求、JVM 异常等 -
配置目录(可选但推荐):挂载
/usr/local/tomcat/conf,用于自定义server.xml(改端口、AJP 连接器)、web.xml或context.xml
注意权限:官方 Tomcat 镜像以 UID 1001 运行,宿主机对应目录需执行:
chown -R 1001:1001 /data/tomcat/{logs,webapps,conf}
Apache 与 Tomcat 容器间通信要配对
挂载只是第一步,两者必须网络互通且协议对齐:
- 使用
docker network create java-web-net创建自定义网络 - Tomcat 启动时暴露 AJP 8009(或 HTTP 8080),并指定网络:
docker run -d --name tomcat-app \ --network java-web-net \ -v /data/tomcat/webapps:/usr/local/tomcat/webapps \ -v /data/tomcat/logs:/usr/local/tomcat/logs \ tomcat:10-jre21-temurin
- Apache 配置中
ProxyPass必须指向 Tomcat 容器名(Docker DNS 自动解析):<virtualhost> ServerName app.example.com ProxyPreserveHost On ProxyPass / ajp://tomcat-app:8009/ ProxyPassReverse / ajp://tomcat-app:8009/ </virtualhost>
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











