容器化部署 Tomcat + MySQL 实战指南:从入门到进阶
🌟 背景与目标
在现代软件开发中,容器化部署已成为主流方式。通过 Docker 部署 Tomcat 和 MySQL,可以实现快速构建、部署、调试和维护。本文将从最基础的镜像构建开始,逐步深入到数据持久化、配置热更新、日志管理、多服务编排等进阶主题,并对比不同部署方案的优劣,帮助您构建一套可维护、可扩展、可复制的容器化部署方案。
🧱 第一:基础部署 —— 构建自定义zprint_tomcat镜像
1. 创建zprint-tomcat镜像构建目录结构
zprint-tomcat/├── Dockerfile├── webapps/│ └── ROOT # 本应用目录为ROOT, 如果为app.WAR 会自动解压被tomcat 加载├── conf/│ └── server.xml├── logs/└── temp/
2. 编写 Dockerfile(zprint_Tomcat)
dockerfile
# 使用官方 Tomcat 8.5 作为基础镜像FROM tomcat:8.5# 设置环境变量(时区)ENV TZ=Asia/Shanghai# 创建 webapps 目录RUN mkdir -p /usr/local/tomcat/webapps# 拷贝您的应用到镜像中COPY webapps/ /usr/local/tomcat/webapps/# 拷贝自定义 server.xml(可选)COPY conf/server.xml /usr/local/tomcat/conf/# 暴露端口EXPOSE 8099
3. 构建并推送zprint_tomcat镜像到阿里云
#!/bin/bash# 构建自定义 Tomcat 镜像使用,如果使用已有镜像只需要允许zprint.yaml dockercompse这个文件即可自动组织zprint_mysql+zprint_tomcat容器允许DOCKER_IMAGE_NAME=crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_tomcat:8.5# 构建镜像docker build -t $DOCKER_IMAGE_NAME .# 添加远程仓库标签docker tag $DOCKER_IMAGE_NAME crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_tomcat:8.5# 登录阿里云私有仓库(如需推送)echo \"请手动执行登录(如需推送):\"echo \"docker login --username=ailiylz crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com\"echo \"构建完成。如需推送,请执行:\"echo \"docker push crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_tomcat:8.5\"
🧱 第二层:基础部署 —— 构建自定义zprint_mysql镜像
1. 创建zprint-tomcat镜像构建目录结构
zprint-mysql/├── Dockerfile├── conf.d/│ └── custom.cnf└── schema/ ├── zprint_Schema.sql <- 数据库结构初始化脚本 └── zprint_Data.sql <- 数据初始化脚本
2. 编写 Dockerfile(zprint_mysql)
# 使用基础 MySQL 5.7 镜像FROM mysql:5.7# 设置时区ENV TZ=Asia/Shanghai# 拷贝初始化脚本(容器启动时自动执行)COPY schema/*.sql /docker-entrypoint-initdb.d/# 拷贝自定义配置文件COPY conf.d/custom.cnf /etc/mysql/conf.d/# 设置工作目录WORKDIR /usr/local/mysql
3. 构建并推送zprint_mysql镜像到阿里云
#!/bin/bash# 构建自定义 Tomcat 镜像使用,如果使用已有镜像只需要允许zprint.yaml dockercompse这个文件即可自动组织zprint_mysql+zprint_tomcat容器允许DOCKER_IMAGE_NAME=crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_mysql:5.7# 构建镜像docker build -t $DOCKER_IMAGE_NAME .# 添加远程仓库标签docker tag $DOCKER_IMAGE_NAME crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_mysql:5.7# 登录阿里云私有仓库(如需推送)echo \"请手动执行登录(如需推送):\"echo \"docker login --username=ailiylz crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com\"echo \"构建完成。如需推送,请执行:\"echo \"docker push crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_mysql:5.7\"
🧩 第三:服务编排 —— 使用 zprint.yaml
🛠 示例 zprint.yaml 文件方式持久化
# 以文件方式挂载持久化version: \'3.8\'services: mysql: image: crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint-mysql:5.7 container_name: zprint_db environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: zprint_db MYSQL_USER: Faurecia MYSQL_PASSWORD: 1qaz2wsx ports: - \"33306:3306\" volumes: - ./mysql_data:/var/lib/mysql - ./mysql_data:/etc/mysql/conf.d/ healthcheck: test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\"] interval: 10s timeout: 3s retries: 3 networks: - zprint_net tomcat: image: crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint-tomcat:8.5 container_name: zprint ports: - \"8099:8099\" environment: TZ: Asia/Shanghai LANG: C.UTF-8 LC_ALL: C.UTF-8 depends_on: mysql: condition: service_healthy healthcheck: test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:8099\"] interval: 30s timeout: 10s retries: 5 volumes: - ./tomcat_conf:/usr/local/tomcat/conf - ./tomcat_webapps:/usr/local/tomcat/webapps - ./tomcat_logs:/usr/local/tomcat/logs - ./tomcat_temp:/usr/local/tomcat/temp networks: - zprint_netnetworks: zprint_net: driver: bridge
🛠 示例二 zprint.yaml 卷volumes方式持久化
# 已挂载卷方式持久化services: mysql: image: crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint-mysql:5.7 container_name: zprint_db environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: zprint_db MYSQL_USER: Faurecia MYSQL_PASSWORD: 1qaz2wsx ports: - \"33306:3306\" volumes: - zprint_mysql_data:/var/lib/mysql - zprint_mysql_conf:/etc/mysql/conf.d/ healthcheck: test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\"] interval: 10s timeout: 3s retries: 3 networks: - zprint_net tomcat: image: crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint-tomcat:8.5 container_name: zprint ports: - \"8099:8099\" environment: TZ: Asia/Shanghai LANG: C.UTF-8 LC_ALL: C.UTF-8 depends_on: mysql: condition: service_healthy healthcheck: test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:8099\"] interval: 30s timeout: 10s retries: 5 volumes: - zprint_tomcat_conf:/usr/local/tomcat/conf - zprint_tomcat_webapps:/usr/local/tomcat/webapps - zprint_tomcat_logs:/usr/local/tomcat/logs - zprint_tomcat_temp:/usr/local/tomcat/temp networks: - zprint_netvolumes: zprint_mysql_conf: zprint_mysql_data: zprint_tomcat_conf: zprint_tomcat_webapps: zprint_tomcat_logs: zprint_tomcat_temp:networks: zprint_net: driver: bridge
🧪 启动和关闭服务
#\"-d\"参数表示在后台运行(daemon模式)\"up\"命令会创建并启动容器\"down\"命令会停止并移除容器、网络等资源执行命令前确保在包含yaml文件的目录下# bashdocker-compose -f zprint.yaml up -d # docker-compose -f zpirnt.yaml down # 使用默认的docker-compose.yaml文件docker-compose up -d # 启动docker-compose down # 停止
📦 第四:数据持久化与配置热更新
🧾 1. 命名卷 vs 绑定挂载 —— 对比与选择
对比项
命名卷 (Named Volume)
绑定挂载 (Bind Mount)
定义方式
tomcat_logs:/usr/local/tomcat/logs
./logs:/usr/local/tomcat/logs
存储位置
Docker 自动管理(如 /var/lib/docker/volumes/...)
手动指定宿主机目录(如 ./logs)
是否可见
❌ 不可见,需用 docker volume inspect 查看
✅ 可见,直接在宿主机上查看
是否便于维护
✅ 是,Docker 自动管理权限、生命周期等
⚠️ 否,需手动创建、维护目录
是否适合团队协作
✅ 是,不依赖本地路径结构
❌ 否,路径可能因人而异
是否推荐用于生产
✅ 是
⚠️ 否
2. centos 下命名卷挂载路径/var/lib/docker/volumes
4. 推荐使用命名卷的场景:
- 多容器数据共享:如共享数据库或配置,命名卷允许跨容器访问同一数据源,支持
--volumes-from
继承配置,适合微服务架构。 - 生产环境持久化存储:Docker 管理卷数据,独立于容器生命周期,删除容器后数据保留,适合关键业务数据(如数据库文件)。
- 数据备份与迁移:卷存储在 Docker 托管目录(
/var/lib/docker/volumes/
),便于跨主机迁移或备份,避免依赖宿主机路径差异。 - 高性能需求场景:在高并发或 I/O 密集型应用中,命名卷比绑定挂载性能更优,减少文件系统开销。
5.推荐使用绑定挂载的场景:
- 开发与测试环境:实时同步宿主机代码到容器(如本地源码挂载到容器 Web 目录),支持热更新,无需重建镜像。
- 访问宿主机特定文件:直接挂载主机配置文件(如
/etc/app/config
)或日志目录(/var/log
),容器可直接读写宿主机资源。 - 简单数据共享:快速共享宿主机目录(如日志或临时数据),无需创建卷,适用于单次任务或调试。
- 主机依赖型应用:当应用需强绑定宿主机文件系统结构时(如使用绝对路径的脚本),优先绑定挂载。
🧪 第五、容器常用命令及操作案例
操作
命令
启动服务
docker-compose -f docker-compose.yaml up -d
停止服务
docker-compose -f docker-compose.yaml stop
重启 Tomcat
docker-compose -f docker-compose.yaml restart tomcat
查看日志
docker logs zprint
进入容器调试
docker exec -it zprint /bin/bash
删除容器(保留数据)
docker-compose -f docker-compose.yaml down
1. docker image 命令管理实例
[root@localhost ~]# docker image rm f41e0c55a09aUntagged: crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_tomcat:8.5Untagged: crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_tomcat@sha256:61a3748e8be4d27edb1a45a707bbad32cda9679773397db0fa79c828d4af0eeeDeleted: sha256:f41e0c55a09afa83a366e5292df4b980d833b7415dba37ea4f50d1b95e07e581[root@localhost ~]# docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEcrpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_mysql 5.7 3fae0828f4b4 4 days ago 507MBmysql 8.0 12a2ae8fe734 3 months ago 772MBhello-world latest 74cc54e27dc4 6 months ago 10.1kBdpanel/dpanel lite 6f81b76efea8 8 months ago 159MBtomcat 8.5 0a2249be3d31 16 months ago 456MBmysql 5.7 5107333e08a8 19 months ago 501MBregistry.cn-beijing.aliyuncs.com/dc3/iot-dc3-web 2023.4.0.demo 4f9cdb8a7a03 2 years ago 22.1MBregistry.cn-beijing.aliyuncs.com/dc3/dc3-mysql 2023.4.0.demo ac415318842e 2 years ago 449MBregistry.cn-beijing.aliyuncs.com/dc3/dc3-gateway 2023.4.0.demo 7ca89202d3bc 2 years ago 244MBregistry.cn-beijing.aliyuncs.com/dc3/dc3-center-manager 2023.4.0.demo 87a93b5cacf1 2 years ago 241MBregistry.cn-beijing.aliyuncs.com/dc3/dc3-center-data 2023.4.0.demo 02507a999618 2 years ago 253MBregistry.cn-beijing.aliyuncs.com/dc3/dc3-center-auth 2023.4.0.demo 37b010ca4c2f 2 years ago 239MBregistry.cn-beijing.aliyuncs.com/dc3/dc3-driver-virtual 2023.4.0.demo 3ae832335eef 2 years ago 185MBregistry.cn-beijing.aliyuncs.com/dc3/dc3-mongo 2023.4.0.demo 61fa1629960b 2 years ago 736MBregistry.cn-beijing.aliyuncs.com/dc3/dc3-rabbitmq 2023.4.0.demo 3f30ca529949 2 years ago 108MBregistry.cn-beijing.aliyuncs.com/dc3/dc3-redis 2023.4.0.demo 0fafd8a3e04c 2 years ago 32.5MBregistry.cn-beijing.aliyuncs.com/dc3/dc3-center-register 2023.4.0.demo 880a539df928 2 years ago 544MBcrpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/mydockerdemo latest 97f57120105e 2 years ago 341MB
2. 镜像创建过程实例
[root@localhost ~]# cd /app/zprint-tomcat/[root@localhost zprint-tomcat]# lsconf Dockerfile logs temp webapps zprint_tomcat_build.sh[root@localhost zprint-tomcat]# sh zprint_tomcat_build.sh[+] Building 7.3s (9/9) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 424B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/tomcat:8.5 0.0s => [1/4] FROM docker.io/library/tomcat:8.5 0.0s => [internal] load build context 7.2s => => transferring context: 76.69MB 7.0s => CACHED [2/4] RUN mkdir -p /usr/local/tomcat/webapps 0.0s => CACHED [3/4] COPY webapps/ /usr/local/tomcat/webapps/ 0.0s => CACHED [4/4] COPY conf/server.xml /usr/local/tomcat/conf/ 0.0s => exporting to image 0.0s => => exporting layers0.0s => => writing image sha256:20a4645b4bbe1445284b10730bcbf5fbc6aa94aae8a7951b3f253a8deb60e114 0.0s => => naming to crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_tomcat:8.5 0.0s请手动执行登录(如需推送):docker login --username=ailiylz crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com构建完成。如需推送,请执行:docker push crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_tomcat:8.5[root@localhost zprint-tomcat]# docker login --username=ailiylz crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.comPassword:Error response from daemon: Get \"https://crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/v2/\": Get \"https://dockerauth.cn-hangzhou.aliyuncs.com/auth?account=ailiylz&client_id=docker&offline_token=true&service=registry.aliyuncs.com%3Acn-hangzhou%3A26842\": read tcp 192.168.1.199:53244->120.55.35.37:443: read: connection reset by peer[root@localhost zprint-tomcat]# docker login --username=ailiylz crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.comPassword:Error response from daemon: Get \"https://crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/v2/\": Get \"https://dockerauth.cn-hangzhou.aliyuncs.com/auth?account=ailiylz&client_id=docker&offline_token=true&service=registry.aliyuncs.com%3Acn-hangzhou%3A26842\": read tcp 192.168.1.199:35932->120.55.35.34:443: read: connection reset by peer[root@localhost zprint-tomcat]# docker login --username=ailiylz crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.comPassword:WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded[root@localhost zprint-tomcat]# ^C[root@localhost zprint-tomcat]# docker push crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_tomcat:8.5The push refers to repository [crpi-61kqwp5ugch8hao1.cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint_tomcat]24fc90e0759b: Layer already existsacc82c5341a3: Layer already exists5f70bf18a086: Pushed2a0c096d3062: Layer already existsfb0f37a0ea02: Layer already exists02a99687e95e: Layer already exists3e75af8aba85: Layer already existsc2ef3e72aded: Layer already existsd5a8ba654b65: Layer already exists17031737aa00: Layer already exists5498e8c22f69: Layer already exists8.5: digest: sha256:4aaab71ca074a0f1266b0c646cd178923bf6eb00ae46caea73ec60441063c11b size: 2621[root@localhost zprint-tomcat]#
3.docker-compse 容器管理实例
Last login: Mon Jul 21 16:14:42 2025 from 192.168.1.120[root@localhost ~]# cd /app/zprint_test/[root@localhost zprint_test]# lszprint.yaml[root@localhost zprint_test]# docker-compose -f zprint.yaml up -d[+] Running 4/4 ✔ Network zprint_test_zprint_net Created 0.1s ✔ Volume \"zprint_test_zprint_tomcat_webapps\" Created 0.0s ✔ Container zprint_db Healthy 0.3s ✔ Container zprint_tomcat Started 12.0s[root@localhost zprint_test]# docker-compose -f zprint.yaml down[+] Running 3/3 ✔ Container zprint_tomcat Removed 0.4s ✔ Container zprint_db Removed 1.3s ✔ Network zprint_test_zprint_net Removed 0.1s[root@localhost zprint_test]# docker-compose -f zprint.yaml up -d[+] Running 5/5 ✔ Network zprint_test_zprint_net Created 0.1s ✔ Volume \"zprint_test_zprint_tomcat_conf\" Created 0.0s ✔ Volume \"zprint_test_zprint_tomcat_webapps\" Created 0.0s ✔ Container zprint_db Healthy 0.0s ✔ Container zprint_tomcat Started 5.0s
4. 镜像离线传输tag 重新加载等操作
操作
命令
📦 打包镜像为 .tar
docker save -o
📤 加载镜像
docker load -i
📋 查看镜像列表
docker images
📦 查看 tar 包内容
tar tf
# 📦 打包镜像为 .tar 文件docker save -o zprint-mysql.tar cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint-mysql:5.7docker save -o zprint-tomcat.tar cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint-tomcat:8.5# 这会将两个镜像分别保存为:zprint-mysql.tarzprint-tomcat.tar# 重新加载docker load -i zprint-mysql.tardocker load -i zprint-tomcat.tar--------------------------------------------------# ⚠️ 不建议手动解压镜像文件,Docker 镜像是分层结构,手动解压无法还原完整镜像。tar tf zprint-mysql.tar# 输出示例:././manifest.json./config.json./layer.tar...------------------------------------------------# 🧪 更好建议 打包并压缩镜像(节省空间)docker save cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint-mysql:5.7 | gzip > zprint-mysql.tar.gzdocker save cn-hangzhou.personal.cr.aliyuncs.com/ylzzone/zprint-tomcat:8.5 | gzip > zprint-tomcat.tar.gz# 解压和重新加载gunzip -c zprint-mysql.tar.gz | docker loadgunzip -c zprint-tomcat.tar.gz | docker load
🚨 第六:容器化部署 Tomcat + MySQL 常见易错点汇总
以下是我们沟通中总结的最容易出错的点,按类别分类整理,帮助您避免“踩坑”。
📁 1. 目录结构与挂载问题
volumes:
中路径匹配,如 - zprint_tomcat_webapps:/usr/local/tomcat/webapps
webapps/ROOT/
目录结构错误/usr/local/tomcat/webapps/ROOT/
下是否有 index.jsp
server.xml
中 unpackWARs=\"false\"
导致 WAR 包未展开true
,并重启容器chmod
或 chown
修改权限⚙️ 2. 配置文件问题
server.xml
配置错误Host
或 Context
配置不正确,导致应用未加载Host
中 appBase=\"webapps\"
且 unpackWARs=\"true\"
web.xml
缺失或错误WEB-INF/web.xml
存在且配置正确jdbc.properties
配置错误jdbc.properties
中的 URL、用户名、密码context.xml
配置缺失context.xml
配置文件server.xml
中未配置 Context
🧱 3. 镜像构建问题
webapps/
, conf/
等目录Dockerfile
中的 COPY
指令docker push
,导致其他机器无法拉取docker push
:8.5
)lib/*.jar
,导致 JSP 编译失败WORKDIR /app
等指令确保路径正确🧩 4. docker-compose 编排问题
depends_on
+ condition: service_healthy
volumes:
挂载数据目录image:
字段是否与推送镜像一致depends_on
中服务名拼写错误services:
中一致networks:
定义共享网络📁 5. 命名卷 vs 绑定挂载混淆
/usr/local/tomcat/conf
docker volume inspect
查看实际路径📊 6. 日志与调试问题
volumes:
挂载日志目录/usr/local/tomcat/logs/
catalina.out
和 localhost.log
mysql
容器日志docker logs
时未指定容器名docker logs zprint
指定容器名🧩 7. 网络与访问问题
ports:
配置,如 \"8099:8099\"
networks:
定义共享网络/ROOT
,但访问 /app
http://ip:8099/
healthcheck
成功后再访问🧪 8. 数据库连接问题
docker-entrypoint-initdb.d/
初始化脚本jdbc.properties
或 context.xml
volumes:
持久化 /var/lib/mysql
maxActive
, maxWait
等参数ports:
配置 \"33306:3306\"
🧰 9. 命令执行问题
-f
指定 compose 文件docker-compose.yml
docker-compose -f zprint.yaml up -d
docker-compose restart tomcat
docker run
替代 composedocker-compose
docker-compose down -v
清理卷docker ps
查看容器状态📋 总结表格:常见错误点汇总
webapps/ROOT/
不存在或内容错误server.xml
、web.xml
配置错误depends_on
+ healthcheck
server.xml
中 unpackWARs
catalina.out
和 localhost.log
docker-compose restart
和 docker ps
📌第七:异常操作查询及脚本
1. 常用DOCKER 排错命令
# 确认服务是否运行正常# bashdocker ps#查看 Tomcat 日志docker exec -it zprint cat /usr/local/tomcat/logs/catalina.out#进入容器检查应用目录docker exec -it zprint ls /usr/local/tomcat/webapps/ROOT#检查数据库连接docker exec -it zprint mysql -h mysql -u Faurecia -p -e \"use zprint_db; show tables;\"#重启服务docker-compose -f zprint.yaml restart tomcat
2. zprint-check.sh 脚本
# zprint-check.sh# !/bin/bash# 设置颜色输出RED=\'\\033[0;31m\'GREEN=\'\\033[0;32m\'YELLOW=\'\\033[0;33m\'NC=\'\\033[0m\' # No Color# 检查 docker-compose 文件是否存在if [ ! -f \"docker-compose.yaml\" ]; then echo -e \"${RED}❌ docker-compose.yaml 文件不存在,请确保当前目录正确。${NC}\" exit 1fi# 获取当前目录CURRENT_DIR=$(pwd)# 检查容器是否运行check_container_status() { echo -e \"${YELLOW}🔍 检查容器运行状态...${NC}\" docker-compose -f docker-compose.yaml ps | grep -E \"zprint|zprint_db\" | awk \'{print $1, $2, $3, $5}\'}# 检查容器健康状态check_health_status() { echo -e \"${YELLOW}🧬 检查容器健康状态...${NC}\" docker inspect zprint | grep -i \"health\" | grep -v \"Healthcheck\" | head -n 3 docker inspect zprint_db | grep -i \"health\" | grep -v \"Healthcheck\" | head -n 3}# 检查挂载目录check_mounted_dirs() { echo -e \"${YELLOW}📁 检查挂载目录是否存在...${NC}\" if [ -d \"./tomcat_webapps/ROOT\" ]; then echo -e \"${GREEN}✅ webapps/ROOT 目录存在${NC}\" else echo -e \"${RED}❌ webapps/ROOT 目录不存在,请检查挂载配置${NC}\" fi if [ -d \"./tomcat_conf\" ]; then echo -e \"${GREEN}✅ tomcat_conf 目录存在${NC}\" else echo -e \"${RED}❌ tomcat_conf 目录不存在,请检查挂载配置${NC}\" fi}# 检查 Tomcat 日志check_tomcat_logs() { echo -e \"${YELLOW}📄 检查 Tomcat 日志是否有错误...${NC}\" if [ -f \"./tomcat_logs/catalina.out\" ]; then ERROR_COUNT=$(grep -c \"ERROR\\|SEVERE\\|Exception\" ./tomcat_logs/catalina.out) if [ $ERROR_COUNT -gt 0 ]; then echo -e \"${RED}❌ 日志中发现 $ERROR_COUNT 个错误,请检查:${NC}\" grep -A 5 -B 5 \"ERROR\\|SEVERE\\|Exception\" ./tomcat_logs/catalina.out | head -n 20 else echo -e \"${GREEN}✅ 日志中未发现严重错误${NC}\" fi else echo -e \"${RED}❌ catalina.out 日志文件不存在,请检查挂载是否正确${NC}\" fi}# 检查数据库连接check_database_connection() { echo -e \"${YELLOW}🔌 检查数据库连接...${NC}\" docker exec -it zprint_db mysql -u Faurecia -p1qaz2wsx -e \"use zprint_db; show tables;\" 2>/dev/null if [ $? -eq 0 ]; then echo -e \"${GREEN}✅ 数据库连接正常,已找到表${NC}\" else echo -e \"${RED}❌ 数据库连接失败,请检查用户名/密码/网络配置${NC}\" fi}# 检查应用是否加载check_app_deployment() { echo -e \"${YELLOW}📦 检查 Tomcat 是否加载应用...${NC}\" docker exec -it zprint ls /usr/local/tomcat/webapps/ROOT/index.jsp 2>/dev/null if [ $? -eq 0 ]; then echo -e \"${GREEN}✅ 应用文件存在,index.jsp 已加载${NC}\" else echo -e \"${RED}❌ 应用文件未找到,请检查挂载或 WAR 解压配置${NC}\" fi docker exec -it zprint cat /usr/local/tomcat/logs/catalina.out | grep -i \"deployed\" | grep -q \"ROOT\" if [ $? -eq 0 ]; then echo -e \"${GREEN}✅ 应用已成功部署${NC}\" else echo -e \"${RED}❌ 应用未部署,请检查 server.xml 或挂载配置${NC}\" fi}# 检查服务访问check_service_access() { echo -e \"${YELLOW}🌐 检查服务访问...${NC}\" curl -s -o /dev/null -w \"%{http_code}\" http://localhost:8099/ HTTP_CODE=$? if [ $HTTP_CODE -eq 0 ]; then echo -e \"${GREEN}✅ 服务已响应 HTTP 200 OK${NC}\" else echo -e \"${RED}❌ 服务返回错误,请检查 Tomcat 或网络配置${NC}\" fi}# 执行检查check_container_statuscheck_health_statuscheck_mounted_dirscheck_tomcat_logscheck_database_connectioncheck_app_deploymentcheck_service_accessecho -e \"${GREEN}✅ 检查完成!请根据上述信息判断问题所在。${NC}\"echo -e \"💡 提示:如需进一步分析,请查看日志文件 ./tomcat_logs/catalina.out\"
2. 执行zprint-check.sh bash 命令
chmod +x c:\\your .sh file absulutly path\\Tomcat 8.5\\zprint-check.sh
📌第八: 下一步建议
希望这篇博文对您有帮助!如需进一步定制或扩展,请随时告诉我。
- 是否需要我帮您生成一键备份脚本?
- 是否需要我优化日志轮转策略?
- 是否需要我演示如何动态更新 JDBC 配置?
- 本地开发调试
- 快速修改配置文件或日志
- 需要直接访问宿主机文件内容
- 生产环境部署
- 多人协作项目
- 需要镜像+卷组合发布的场景
- 实现日志、配置、临时文件的持久化
- 支持本地修改配置文件后重启容器生效
- 使用 docker-compose 启动 MySQL 和 Tomcat 容器
- 设置依赖关系,确保启动顺序正确
- 构建包含 Web 应用的 Tomcat 镜像
- 构建包含初始化数据的 MySQL 镜像