Tomcat Docker 官方镜像快速上手:挂载应用、切换 JDK 版本与常用启动参数实操教程 Tomcat Docker 官方镜像快速上手挂载应用、切换 JDK 版本与常用启动参数实操教程【免费下载链接】tomcatDocker Official Image packaging for Apache Tomcat项目地址: https://gitcode.com/gh_mirrors/to/tomcat本文面向新手带你用Tomcat Docker 官方镜像Apache Tomcat 的 Docker 官方镜像封装完成从零到上线的快速部署。重点实操三件高频任务挂载你的应用、按标签切换 JDK 版本、调整常用启动参数内存、端口、时区3 分钟即可在容器里跑起自己的 Web 服务。一、先看懂镜像标签Tomcat 版本 × JDK 版本的组合规则Tomcat 官方镜像的标签遵循一套清晰的组合规则看懂就能自由选型tomcat:Tomcat大版本-jdk|jreJDK版本例如tomcat:10.1-jdk11、tomcat:9.0-jdk8、tomcat:11.0-jdk21。当前仓库维护的版本矩阵来源versions.json如下Tomcat 大版本当前版本可选 JDK基础系统9.09.0.1218 / 11 / 17 / 21 / 25Ubuntu jammy(22.04) / noble(24.04)10.110.1.5911 / 17 / 21 / 25Ubuntu jammy / noble11.011.0.2517 / 21 / 25Ubuntu jammy / noble几个新手需要知道的关键点JDK 一律来自 Eclipse Temurinjammy表示 Ubuntu 22.04noble表示 Ubuntu 24.04基础镜像为eclipse-temurin:版本-jdk见 from.jq。jdk与jre的区别jdk标签会在构建时从源码编译 Tomcat NativeAPR/SSL 加速库jre标签直接复用同版本jdk镜像的 Tomcat 目录、只装运行依赖镜像更精简见 Dockerfile.template 中的两种构建分支。每个变体在仓库中都有独立目录如9.0/jdk11/temurin-jammy/Dockerfile由模板统一生成请勿手改。二、一条命令启动3 分钟跑起 Tomcat 容器执行下面这条命令即可启动一个 Tomcat 10.1 JDK 11 的容器docker run --name tomcat -d -p 8080:8080 tomcat:10.1-jdk11启动成功后浏览器访问http://localhost:8080即可。它背后的机制非常直白见 9.0/jdk11/temurin-jammy/Dockerfile工作目录是/usr/local/tomcat即CATALINA_HOMEbin已加入PATH镜像默认EXPOSE 8080默认启动命令为catalina.sh run。重要细节镜像内的webapps目录默认是空的——官方自带的示例应用被移到了webapps.dist目录中。这是官方有意为之方便你直接放入自己的应用而无需先清理。三、挂载应用把你的 war 包送进容器容器内webapps是空的那么自己的应用怎么进去最推荐的做法是卷挂载无需重新构建镜像。方式一挂载单个 war 包最常用docker run -d -p 8080:8080 \ -v /path/to/your-app.war:/usr/local/tomcat/webapps/your-app.war \ tomcat:10.1-jdk11访问http://localhost:8080/your-app/即可。方式二挂载整个 webapps 目录本地开发热更新docker run -d -p 8080:8080 \ -v ./my-webapps:/usr/local/tomcat/webapps \ tomcat:10.1-jdk11方式三持久化日志生产环境建议-v ./tomcat-logs:/usr/local/tomcat/logs补充一点安心细节官方镜像构建时已对logs、temp、work目录执行chmod 1777见 10.1/jdk17/temurin-noble/Dockerfile即使容器以非 root 用户运行挂载卷的写入也不会有权限问题。四、切换 JDK 版本换标签即可但要注意兼容矩阵切换 JDK 版本不需要任何配置改标签即可docker run --name tomcat -d -p 8080:8080 tomcat:11.0-jdk21但并非任意 JDK 都能搭配任意 Tomcat 大版本官方兼容规则与 shared.jq 中的校验逻辑一致是Tomcat 版本最低 JDK 要求9.xJDK 810.1.xJDK 1111.xJDK 17选型口诀新项目优先tomcat:11.0-jdk21老项目兼容期可选tomcat:9.0-jdk8追求小镜像把jdk换成jre。想确认容器里到底装了什么版本一条命令即可docker run --rm tomcat:10.1-jdk11 java -version docker run --rm tomcat:10.1-jdk11 catalina.sh version五、常用启动参数内存、端口、时区一键调整 ⚙️Tomcat 的启动脚本catalina.sh原生支持通过环境变量和命令行参数调优容器场景下都能直接套用。1调整 JVM 内存高频docker run -d -p 8080:8080 \ -e CATALINA_OPTS-Xms256m -Xmx512m \ tomcat:10.1-jdk112修改 HTTP 服务端口镜像默认命令是catalina.sh run且 Temurin 基座已清空 ENTRYPOINT你可以直接在命令末尾追加参数覆盖它docker run -d -p 8080:8443 tomcat:10.1-jdk11 catalina.sh run -server 84433修正时区避免日志时间差 8 小时-e TZAsia/Shanghai组合拳示例一条命令完成内存 时区 应用挂载docker run --name tomcat -d -p 8080:8080 \ -e CATALINA_OPTS-Xms256m -Xmx512m \ -e TZAsia/Shanghai \ -v ./app.war:/usr/local/tomcat/webapps/app.war \ tomcat:10.1-jdk11六、进阶定制自己的 Tomcat 镜像 如果需要把应用固化进镜像而非每次挂载基于官方标签派生即可两步搞定FROM tomcat:10.1-jdk11 COPY target/your-app.war /usr/local/tomcat/webapps/对比官方仓库的 Dockerfile.template 你会发现官方镜像还做了 SHA512 校验、GPG 签名验证、Tomcat Native 编译等大量安全与性能加固——自己派生时继承官方标签这些加固全部免费获得。七、新手常见问题速查现象原因与处理Bind for 0.0.0.0:8080 failed: port is already allocated端口被占用改用-p 8088:8080访问应用返回 404默认webapps为空检查 war 挂载路径与目录名是否一致启动慢、卡住不动docker logs -f tomcat实时查看 Tomcat 输出日志时间与本地不一致加-e TZAsia/Shanghai想换 JDK 版本直接改标签如tomcat:10.1-jdk21注意兼容矩阵小结Tomcat Docker 官方镜像把「下载、解压、配置 Tomcat」这件烦心事全部封装成了简单的标签选择选标签tomcat:大版本-jdk|jreJDK版本牢记兼容矩阵跑起来docker run -d -p 8080:8080 tomcat:10.1-jdk11挂应用-v ./app.war:/usr/local/tomcat/webapps/app.war调参数CATALINA_OPTS管内存-server管端口TZ管时区。掌握以上四步你就能在任意 Linux 环境里快速、干净地部署 Tomcat 服务了。☕【免费下载链接】tomcatDocker Official Image packaging for Apache Tomcat项目地址: https://gitcode.com/gh_mirrors/to/tomcat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

2026年福建做智慧排水监测系统的公司前10名有哪些?

2026年福建做智慧排水监测系统的公司前10名有哪些?

台风中心刚在福建沿海登陆,福州城区的雨势却没有立刻减弱,天文大潮正把闽江水顶进雨水排口,管网液位在短时间内快速抬升,调度大屏上的监测点陆续变红。这样的场景,福建沿海城市每年汛期都可能遇到——暴雨和潮水同时到…

2026/8/24 9:22:47
PyAMG快速上手教程:5分钟从安装到求解2D Poisson方程

PyAMG快速上手教程:5分钟从安装到求解2D Poisson方程

PyAMG快速上手教程:5分钟从安装到求解2D Poisson方程 【免费下载链接】pyamg Algebraic Multigrid Solvers in Python 项目地址: https://gitcode.com/gh_mirrors/py/pyamg PyAMG 是一个用 Python 编写的代数多重网格(Algebraic Multigrid, AMG&a…

2026/8/24 9:22:47
99.3% 通过率背后的失败模式:Multi-Agent-CAD 与单 Agent CAD 生成器的 3 类典型错误深度对比

99.3% 通过率背后的失败模式:Multi-Agent-CAD 与单 Agent CAD 生成器的 3 类典型错误深度对比

99.3% 通过率背后的失败模式:Multi-Agent-CAD 与单 Agent CAD 生成器的 3 类典型错误深度对比 【免费下载链接】Multi-Agent-CAD MAC (Multi-Agent CAD): A decoupled multi-agent framework for text-to-CAD generation via constrained test-time compute 项目地…

2026/8/24 9:22:47
TDAD框架:用测试驱动与图分析为AI编码助手构建安全沙盒

TDAD框架:用测试驱动与图分析为AI编码助手构建安全沙盒

1. 项目概述:当AI编码助手开始“闯祸”,我们如何为它装上“刹车”?最近半年,我身边用上AI编码助手(比如GitHub Copilot、Cursor、Claude Code)的开发者越来越多了。效率的提升是肉眼可见的,以前…

2026/8/24 9:22:47
多智能体协同规划框架:零维降阶模型在复杂系统优化中的应用

多智能体协同规划框架:零维降阶模型在复杂系统优化中的应用

1. 项目概述:当降阶模型遇上多智能体规划如果你在工程仿真、系统优化或者复杂流程控制领域工作过,大概率对“降阶模型”这个词不陌生。它本质上是一种“高保真”的简化模型,用极少的变量(比如几个关键状态参数)去捕捉一…

2026/8/24 9:22:47
浅谈C++/C关于#define的那些奇奇怪怪的用法

浅谈C++/C关于#define的那些奇奇怪怪的用法

前言 众所周知,#define(也就是宏定义)在C/C里用处很广泛。对于一个萌新小白来说,宏定义有以下几种用法: 1 缩减代码 第一种用法与typedef类似,而且比typedef应用得更广泛。举个例子,在以下C程序中,unsig…

2026/8/24 9:17:46