Apache TomEE 10.2.0 Docker Compose 部署指南
使用官方 tomee 镜像通过 Docker Compose 部署 Apache TomEE 10.2.0 的指南,覆盖镜像选型、compose 编写、持久化挂载、JAVA_OPTS 内存参数与运维命令。
Apache TomEE 10.2.0 Docker Compose 部署指南
一、环境信息
| 项目 | 内容 |
|---|---|
| 宿主操作系统 | Linux x86_64(Docker 26+) |
| Docker Compose | v2.x 及以上(docker compose 子命令) |
| 组件版本 | Apache TomEE 10.2.0(Web Profile) |
| 官方镜像 | tomee:10-jre17-webprofile |
| 镜像内 JDK | OpenJDK 17.0.20.1 |
| 容器内安装目录 | /usr/local/tomee |
| HTTP 端口 | 8080 |
二、镜像选型说明
Docker Hub 官方 tomee 镜像按 tomee:<JDK 版本>-<发行包> 组合打标,10.2.0 版本可选标签包括:
| 标签 | 说明 |
|---|---|
| tomee:10-jre17-webprofile | JDK 17 + Web Profile,常规 Web 应用首选(本文实测使用) |
| tomee:10-jre17-microprofile | MicroProfile,微服务场景 |
| tomee:10-jre17-plus | Web Profile + JMS 等企业特性 |
| tomee:10-jre17-plume | plus + EclipseLink 完整 JPA |
镜像要点(实测自 docker image inspect):默认工作目录 /usr/local/tomee,启动命令 catalina.sh run(前台运行),环境变量 TOMEE_VER=10.2.0、TOMEE_BUILD=webprofile、JAVA_HOME=/opt/java/openjdk。
三、前置条件
- 宿主机已安装 Docker 与 Compose 插件,验证方式:
docker info --format "{{.ServerVersion}}"
docker compose version
- 8080 端口未被占用。
- 准备部署目录:
mkdir -p /opt/tomee-compose/webapps /opt/tomee-compose/logs
- 拉取官方镜像(若内网无法直连 Docker Hub,请配置镜像加速或代理):
docker pull tomee:10-jre17-webprofile
四、部署步骤
4.1 编写 docker-compose.yml
在 /opt/tomee-compose 目录创建 docker-compose.yml:
services:
tomee:
image: tomee:10-jre17-webprofile
container_name: tomee-webprofile
ports:
- "8080:8080"
environment:
JAVA_OPTS: "-Xms256m -Xmx512m -Djava.awt.headless=true"
volumes:
- ./webapps:/usr/local/tomee/webapps
- ./logs:/usr/local/tomee/logs
restart: unless-stopped
参数说明:ports 将宿主机 8080 映射到容器内 TomEE 的 8080;environment 注入 JVM 堆参数;volumes 挂载应用目录与日志目录实现持久化。
4.2 预置默认应用目录(关键步骤)
官方镜像内置了 ROOT、docs、host-manager、manager 四个默认应用,位于镜像内 /usr/local/tomee/webapps。若按 4.1 直接挂载空目录,这些默认应用会被全部遮蔽,访问根路径返回 404。正确做法是先把镜像内的默认应用拷贝到宿主机挂载目录:
docker create --name tomee-tmp tomee:10-jre17-webprofile
docker cp tomee-tmp:/usr/local/tomee/webapps/. /opt/tomee-compose/webapps/
docker rm tomee-tmp
确认拷贝结果:
ls /opt/tomee-compose/webapps/
实测回显:
ROOT docs host-manager manager
4.3 启动服务
cd /opt/tomee-compose
docker compose up -d
实测回显:
Container tomee-webprofile Starting
Container tomee-webprofile Started
4.4 验证部署
查看运行状态:
docker compose ps
实测回显:
NAME STATUS PORTS
tomee-webprofile Up 10 seconds 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp
验证页面(从宿主机或任意可访问主机执行):
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8080/
curl -s http://localhost:8080/ | grep -oE "<title>[^<]+</title>"
实测回显:
200
<title>Apache Tomcat (TomEE)/10.1.57 (10.2.0)</title>
查看启动日志确认无异常:
docker logs tomee-webprofile 2>&1 | grep "Server startup"
实测回显:
12-Oct-2026 05:39:26.447 INFO [main] jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke Server startup in [85] milliseconds
验证 JVM 堆参数已注入:
docker exec tomee-webprofile bash -c "cat /proc/1/cmdline | tr '\0' ' ' | grep -c Xms256m"
实测回显:
1
4.5 部署业务应用
将 war 包放入挂载目录 /opt/tomee-compose/webapps,容器内对应路径随即出现,TomEE 检测到新 war 包后自动解压部署(首次部署约需 30-60 秒扫描):
cp /path/to/hello.war /opt/tomee-compose/webapps/
等待部署完成后验证:
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8080/hello/
实测回显:
200
也可以重启容器让部署在启动阶段完成:
docker compose restart
五、数据持久化说明
| 宿主机目录 | 容器内路径 | 内容 |
|---|---|---|
| ./webapps | /usr/local/tomee/webapps | 部署的应用(war 包与解压目录) |
| ./logs | /usr/local/tomee/logs | catalina.out 等日志文件 |
- webapps 目录持久化后,应用随宿主机目录保存,
docker compose down不会丢失应用;日志同理。 - 如需持久化配置,见第八节配置文件持久化。
- 容器自身存储仅承载 JDK 与 TomEE 程序本体,可随时销毁重建。
六、常用环境变量表
| 环境变量 | 示例值 | 说明 |
|---|---|---|
| JAVA_OPTS | -Xms256m -Xmx512m -Djava.awt.headless=true | JVM 参数,堆内存在此设置(实测注入 PID 1 进程) |
| CATALINA_OPTS | -Dcom.example.prop=value | 仅传给 Catalina 的附加参数 |
| JPDA_ADDRESS | *:8000 | 配合命令层启用远程调试时的监听地址 |
注意:官方镜像未提供服务器端口、管理账号等环境变量,这些需要通过配置文件挂载实现。
七、常用配置参数说明
- 端口映射:compose 中
ports: "8080:8080"左侧为宿主机端口,可改为"18080:8080"等任意空闲端口。 - 堆内存:JAVA_OPTS 中
-Xms初始堆、-Xmx最大堆;修改后执行docker compose up -d重建容器生效。 - 重启策略:
restart: unless-stopped表示随 Docker 守护进程自动拉起,手工 stop 后不再自动启动。 - 默认应用处理:生产环境可删除 webapps 下的 docs、host-manager、manager 目录(仅保留 ROOT 与业务应用),减少暴露面。
- 时区:可在 environment 中追加
TZ: Asia/Shanghai,使日志时间戳与本时区一致。
八、配置文件持久化
将镜像内 /usr/local/tomee/conf 整体拷出后按需修改并挂载回容器:
docker create --name tomee-conf-tmp tomee:10-jre17-webprofile
docker cp tomee-conf-tmp:/usr/local/tomee/conf /opt/tomee-compose/conf
docker rm tomee-conf-tmp
修改 /opt/tomee-compose/conf 中的文件(例如在 tomcat-users.xml 中配置管理账号 admin,密码 q1w2e3r4,以及 manager-gui、manager-script、admin-gui 角色),然后在 compose 的 volumes 中追加:
volumes:
- ./webapps:/usr/local/tomee/webapps
- ./logs:/usr/local/tomee/logs
- ./conf:/usr/local/tomee/conf
执行 docker compose up -d 重建容器使配置生效。
九、等价 docker run 运行方式
不使用 Compose 时,以下单条命令与第四节配置等价:
docker run -d --name tomee-webprofile \
-p 8080:8080 \
-e JAVA_OPTS="-Xms256m -Xmx512m -Djava.awt.headless=true" \
-v /opt/tomee-compose/webapps:/usr/local/tomee/webapps \
-v /opt/tomee-compose/logs:/usr/local/tomee/logs \
--restart unless-stopped \
tomee:10-jre17-webprofile
挂载配置目录的等价写法追加:
docker run -d --name tomee-webprofile \
-p 8080:8080 \
-e JAVA_OPTS="-Xms256m -Xmx512m -Djava.awt.headless=true" \
-v /opt/tomee-compose/webapps:/usr/local/tomee/webapps \
-v /opt/tomee-compose/logs:/usr/local/tomee/logs \
-v /opt/tomee-compose/conf:/usr/local/tomee/conf \
--restart unless-stopped \
tomee:10-jre17-webprofile
十、常用运维命令
docker compose ps
docker compose logs -f
docker compose restart
docker compose stop
docker compose start
docker compose down
docker compose up -d
实时查看容器内日志文件:
tail -f /opt/tomee-compose/logs/catalina.out
进入容器排查:
docker exec -it tomee-webprofile bash
重建容器(配置或镜像变更后):
docker compose up -d --force-recreate
十一、常见问题
Q1:启动后访问 http://localhost:8080/ 返回 404?
原因是空的宿主机目录挂载到 /usr/local/tomee/webapps 后遮蔽了镜像内置的 ROOT 等默认应用。先按 4.2 节用 docker cp 将默认应用拷入挂载目录,再 docker compose up -d 重建容器。
Q2:war 包放入 webapps 后访问仍 404?
首次热部署需要 30-60 秒的扫描时间,可用 docker logs -f tomee-webprofile 观察,出现 Deployment of web application archive [/usr/local/tomee/webapps/hello.war] has finished in [142] ms 字样后再验证;也可直接 docker compose restart 在启动阶段完成部署。
Q3:JAVA_OPTS 内存参数没有生效?
确认写在 compose 的 environment 段,且执行了 docker compose up -d 重建(仅 restart 不刷新环境变量)。核验方式:
docker exec tomee-webprofile bash -c "cat /proc/1/cmdline | tr '\0' ' ' | grep -c Xms256m"
输出 1 表示参数已注入启动进程。
Q4:如何升级到新的 TomEE 小版本?
修改 compose 中 image 标签(如 tomee:10-jre17-webprofile 保持跟随官方更新,或固定到具体新版本标签),执行 docker compose up -d 重建容器;webapps 与 logs 已持久化,应用与日志不受影响。升级前建议备份挂载目录与自定义 conf。
十二、参考链接
- Docker Hub 官方 tomee 镜像页:https://hub.docker.com/_/tomee
- Apache TomEE 官网:https://tomee.apache.org/
- TomEE 10.2.0 下载目录:https://downloads.apache.org/tomee/tomee-10.2.0/
- Compose 文件参考:https://docs.docker.com/reference/compose-file/
- Tomcat 10.1 文档:https://tomcat.apache.org/tomcat-10.1-doc/