docker run 一条命令拉起来 Tomcat,安装容器是默认目录起来了,可你想挂载配置文件时,安装大概率会愣住——默认目录到底在哪儿?默认目录这问题坑过不少人,包括我。安装
官方镜像的默认目录 Tomcat 默认工作目录是 /usr/local/tomcat。对,安装就是默认目录这串路径。webapps 在 /usr/local/tomcat/webapps,安装日志在 /usr/local/tomcat/logs,默认目录配置文件 conf 也在同一层下面。安装你要是默认目录直接进容器看,会发现这目录结构跟宿主机上解压的安装 Tomcat 几乎一模一样。
但有个细节容易踩坑:官方镜像里 webapps 目录是默认目录空的,只有一个 webapps.dist 文件夹。安装这设计从 Tomcat 9 开始就有了,官方把默认的 ROOT 应用、docs、examples 全挪进了 webapps.dist。你要是想访问默认首页,得先把 webapps.dist 里的东西拷到 webapps,或者干脆把容器里 webapps 删了,做个软链接指向 webapps.dist。我第一次用 docker 跑 Tomcat 10,浏览器打开 localhost:8080 直接 404,当时还以为是端口映射出了问题。
实际部署时,没人会直接往容器里丢 war 包——容器一删就全没了。标准做法是挂载宿主机目录:
docker run -d -p 8080:8080 -v /opt/myapp:/usr/local/tomcat/webapps/ROOT tomcat:10.1
注意这里挂载的是 ROOT,不是 webapps 本身。你要是把整个 webapps 挂载成宿主机空目录,镜像里原有的应用全被遮住,连管理界面都进不去。这算是个常见误区,很多人图省事直接 -v /data:/usr/local/tomcat/webapps,结果容器启动后日志报错,因为 webapps.dist 里的东西没被复制过来。
日志文件的位置也值得记住。容器里 Tomcat 把 catalina.out 写到 /usr/local/tomcat/logs,但 Docker 官方镜像默认把 stdout 重定向到容器的 console 日志里。你用 docker logs 能看到输出,可文件系统里 logs 目录往往空着。想持久化日志,就得挂载这个目录,否则容器重建后日志全没。我习惯同时挂载 logs 和 conf,这样改 server.xml 或者调 JVM 参数都不需要重新 build 镜像。
还有个小细节——Tomcat 容器默认时区是 UTC,不是 CST。你挂载日志目录后会发现时间戳差了 8 小时,排查问题的时候容易懵。解决办法是启动时加环境变量:
docker run -e TZ=Asia/Shanghai tomcat:10.1
这跟目录没关系,但属于实战里绕不开的坑,顺手提一嘴。
最后说下版本差异。Tomcat 9 和 10 的默认目录结构完全一致,但 10 之后 Jakarta EE 命名空间变了,webapps 里应用的访问路径没变,配置方式也没变。你要是拿旧 war 包直接扔进 10 的容器,多半会报 ClassNotFoundException,那是代码兼容性问题,跟目录无关。
总结一句:记住 /usr/local/tomcat 是根,webapps 挂应用,logs 挂日志,conf 挂配置,TZ 环境变量记得加。就这些,够用了。






评论专区