容器化 Tomcat 应用程序

1.创建一个名为 tomcat-mysql 的项目目录

bash 复制代码
[root@host1 ~]# mkdir -p /root/projects
[root@host1 ~]# cd /root/projects
[root@host1 projects]# mkdir tomcat-mysql
[root@host1 projects]# ls | grep tomcat-mysql
tomcat-mysql

2.准备配套的应用程序文件

bash 复制代码
[root@host1 tomcat-mysql]# mkdir -p dbinit tomcat/webapps/example-webapp/META-INF tomcat/webapps/example-webapp/WEB-INF/lib
[root@host1 tomcat-mysql]# tree .
.
├── dbinit
└── tomcat
    └── webapps
        └── example-webapp
            ├── META-INF
            └── WEB-INF
                └── lib

7 directories, 0 files

3.在项目目录下编写名为 compose.yaml 的 Compose 文件

bash 复制代码
[root@host1 tomcat-mysql]# vi docker-compose.yaml
[root@host1 tomcat-mysql]# cat docker-compose.yaml
version: '3.8'
services:
  # 1. MySQL 服务(自动执行初始化脚本)
  mysql:
    image: mysql:8.0  # 与 MySQL 驱动版本匹配(8.0.28 驱动适配 MySQL 8.0)
    container_name: tomcat-mysql-db
    environment:
      MYSQL_ROOT_PASSWORD: 123456  # 与 context.xml 中的 password 一致
      MYSQL_DATABASE: example_db   # 与 context.xml 中的数据库名一致
    volumes:
      # 挂载初始化 SQL 脚本,MySQL 启动时自动执行(创建表和测试数据)
      - ./dbinit/mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql
      # 挂载数据卷,持久化 MySQL 数据(重启容器数据不丢失)
      - mysql-data:/var/lib/mysql
    networks:
      - tomcat-mysql-net  # 自定义网络,让 Tomcat 能通过容器名访问 MySQL
    restart: always  # 容器异常时自动重启

  # 2. Tomcat 服务(挂载 Web 应用、MySQL 驱动)
  tomcat:
    image: tomcat:9-jdk11  # Tomcat 9 + JDK 11(适配 Java Web 应用)
    container_name: tomcat-server
    ports:
      - "8080:8080"  # 暴露 8080 端口,外部可访问
    volumes:
      # 挂载 Web 应用到 Tomcat 的 webapps 目录(容器内路径固定)
      - ./tomcat/webapps/example-webapp:/usr/local/tomcat/webapps/example-webapp
      # 挂载 MySQL 驱动到 Tomcat 容器的 lib 目录(解决驱动加载问题!)
      - ./tomcat/webapps/example-webapp/WEB-INF/lib/mysql-connector-java-8.0.28.jar:/usr/local/tomcat/lib/mysql-connector-java-8.0.28.jar
      # 可选:挂载 Tomcat 全局配置(如需自定义 server.xml 等)
      # - ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml
    depends_on:
      - mysql  # 确保 MySQL 先启动,再启动 Tomcat(避免连接失败)
    networks:
      - tomcat-mysql-net
    restart: always

# 定义网络(隔离项目网络,避免与其他容器冲突)
networks:
  tomcat-mysql-net:
    driver: bridge

# 定义数据卷(持久化 MySQL 数据)
volumes:
  mysql-data:

4.启动整个应用程序

bash 复制代码
[root@host1 tomcat-mysql]# docker compose up
WARN[0000] /root/projects/tomcat-mysql/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
[+] Running 21/21
 ✔ mysql Pulled                                                                                84.0s 
   ✔ 500d7b2546c4 Already exists                                                                0.0s 
   ✔ 48934deb9770 Pull complete                                                                19.4s 
   ✔ 021b6107b9d0 Pull complete                                                                23.2s 
   ✔ 13ed16089ebc Pull complete                                                                27.2s 
   ✔ e32dcaa70f77 Pull complete                                                                27.3s 
   ✔ 72a465986d66 Pull complete                                                                27.6s 
   ✔ 27fa9cc59961 Pull complete                                                                35.7s 
   ✔ 8a27c0ce790f Pull complete                                                                35.7s 
   ✔ 390885da77e4 Pull complete                                                                78.4s 
   ✔ 1ca2ca504238 Pull complete                                                                78.4s 
   ✔ d8f78235dcb8 Pull complete                                                                78.4s 
 ✔ tomcat Pulled                                                                               38.7s 
   ✔ 953cdd413371 Pull complete                                                                14.7s 
   ✔ 1eb43857d530 Pull complete                                                                17.6s 
   ✔ 30e90268e187 Pull complete                                                                32.1s 
   ✔ 4fcf4bcc7c79 Pull complete                                                                32.1s 
   ✔ c530a0862e0f Pull complete                                                                32.1s 
   ✔ d195232c3796 Pull complete                                                                32.1s 
   ✔ 4f4fb700ef54 Pull complete                                                                32.2s 
   ✔ 9f44622f62da Pull complete                                                                33.1s 
[+] Running 4/4
 ✔ Network tomcat-mysql_tomcat-mysql-net  Created                                               0.1s 
 ✔ Volume "tomcat-mysql_mysql-data"       Created                                               0.0s 
 ✔ Container tomcat-mysql-db              Created                                               1.4s 
 ✔ Container tomcat-server                Created                                               0.0s 
Attaching to tomcat-mysql-db, tomcat-server
tomcat-mysql-db  | 2025-09-22 02:11:40+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.43-1.el9 started.
tomcat-server    | NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
tomcat-mysql-db  | 2025-09-22 02:11:41+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
tomcat-mysql-db  | 2025-09-22 02:11:41+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.43-1.el9 started.
tomcat-mysql-db  | 2025-09-22 02:11:41+00:00 [Note] [Entrypoint]: Initializing database files
tomcat-mysql-db  | 2025-09-22T02:11:41.725897Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
tomcat-mysql-db  | 2025-09-22T02:11:41.726270Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.43) initializing of server in progress as process 80
tomcat-mysql-db  | 2025-09-22T02:11:41.747515Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
tomcat-server    | 22-Sep-2025 02:11:42.465 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.109
tomcat-server    | 22-Sep-2025 02:11:42.475 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Sep 1 2025 12:15:33 UTC
tomcat-server    | 22-Sep-2025 02:11:42.476 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.109.0
tomcat-server    | 22-Sep-2025 02:11:42.477 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
tomcat-server    | 22-Sep-2025 02:11:42.477 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.14.0-611.el9.x86_64
tomcat-server    | 22-Sep-2025 02:11:42.477 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
tomcat-server    | 22-Sep-2025 02:11:42.477 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
tomcat-server    | 22-Sep-2025 02:11:42.478 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.28+6
tomcat-server    | 22-Sep-2025 02:11:42.478 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Eclipse Adoptium
tomcat-server    | 22-Sep-2025 02:11:42.479 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
tomcat-server    | 22-Sep-2025 02:11:42.479 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
tomcat-server    | 22-Sep-2025 02:11:42.505 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.506 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.506 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.508 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.509 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.509 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
tomcat-server    | 22-Sep-2025 02:11:42.511 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
tomcat-server    | 22-Sep-2025 02:11:42.511 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
tomcat-server    | 22-Sep-2025 02:11:42.512 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
tomcat-server    | 22-Sep-2025 02:11:42.512 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsun.io.useCanonCaches=false
tomcat-server    | 22-Sep-2025 02:11:42.513 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
tomcat-server    | 22-Sep-2025 02:11:42.513 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
tomcat-server    | 22-Sep-2025 02:11:42.514 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
tomcat-server    | 22-Sep-2025 02:11:42.514 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
tomcat-server    | 22-Sep-2025 02:11:42.514 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
tomcat-server    | 22-Sep-2025 02:11:42.529 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.2].
tomcat-server    | 22-Sep-2025 02:11:42.529 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
tomcat-server    | 22-Sep-2025 02:11:42.530 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
tomcat-server    | 22-Sep-2025 02:11:42.547 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.13 30 Jan 2024]
tomcat-server    | 22-Sep-2025 02:11:43.717 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
tomcat-server    | 22-Sep-2025 02:11:43.786 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [1940] milliseconds
tomcat-mysql-db  | 2025-09-22T02:11:43.804662Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
tomcat-server    | 22-Sep-2025 02:11:43.958 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
tomcat-server    | 22-Sep-2025 02:11:43.959 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.109]
tomcat-server    | 22-Sep-2025 02:11:43.983 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
tomcat-server    | 22-Sep-2025 02:11:44.027 SEVERE [main] org.apache.tomcat.util.digester.Digester.fatalError Parse fatal error at line [6] column [46]
tomcat-server    | org.xml.sax.SAXParseException; systemId: file:///usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 6; columnNumber: 46; Element type "Resource" must be followed by either attribute specifications, ">" or "/>".
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.seekCloseOfStartTag(XMLDocumentFragmentScannerImpl.java:1433)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1362)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
tomcat-server    | at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1500)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)
tomcat-server    | at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
tomcat-server    | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
tomcat-server    | at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
tomcat-server    | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
tomcat-server    | at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
tomcat-server    | at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
tomcat-server    | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat-server    | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
tomcat-server    | 22-Sep-2025 02:11:44.034 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying deployment descriptor [/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml]
tomcat-server    | org.xml.sax.SAXParseException; systemId: file:///usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 6; columnNumber: 46; Element type "Resource" must be followed by either attribute specifications, ">" or "/>".
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1243)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
tomcat-server    | at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1500)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)
tomcat-server    | at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
tomcat-server    | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
tomcat-server    | at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
tomcat-server    | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
tomcat-server    | at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
tomcat-server    | at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
tomcat-server    | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat-server    | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
tomcat-server    | 22-Sep-2025 02:11:44.120 SEVERE [main] org.apache.tomcat.util.digester.Digester.fatalError Parse fatal error at line [6] column [46]
tomcat-server    | org.xml.sax.SAXParseException; systemId: file:/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 6; columnNumber: 46; Element type "Resource" must be followed by either attribute specifications, ">" or "/>".
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.seekCloseOfStartTag(XMLDocumentFragmentScannerImpl.java:1433)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1362)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
tomcat-server    | at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1518)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:731)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:676)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:939)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:123)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:155)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
tomcat-server    | at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
tomcat-server    | at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
tomcat-server    | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
tomcat-server    | at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
tomcat-server    | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
tomcat-server    | at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
tomcat-server    | at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
tomcat-server    | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat-server    | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
tomcat-server    | 22-Sep-2025 02:11:44.123 SEVERE [main] org.apache.catalina.startup.ContextConfig.processContextConfig Parse error in context.xml for [/example-webapp]
tomcat-server    | org.xml.sax.SAXParseException; systemId: file:/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 6; columnNumber: 46; Element type "Resource" must be followed by either attribute specifications, ">" or "/>".
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.seekCloseOfStartTag(XMLDocumentFragmentScannerImpl.java:1433)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1362)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
tomcat-server    | at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1518)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:731)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:676)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:939)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:123)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:155)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
tomcat-server    | at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
tomcat-server    | at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
tomcat-server    | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
tomcat-server    | at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
tomcat-server    | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
tomcat-server    | at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
tomcat-server    | at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
tomcat-server    | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat-server    | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
tomcat-server    | 22-Sep-2025 02:11:44.124 SEVERE [main] org.apache.catalina.startup.ContextConfig.processContextConfig Occurred at line [6] column [46]
tomcat-server    | 22-Sep-2025 02:11:44.131 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
tomcat-server    | java.lang.IllegalStateException: Error starting child
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:602)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
tomcat-server    | at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
tomcat-server    | at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
tomcat-server    | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
tomcat-server    | at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
tomcat-server    | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
tomcat-server    | at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
tomcat-server    | at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
tomcat-server    | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat-server    | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
tomcat-server    | Caused by: org.apache.catalina.LifecycleException: Failed to process either the global, per-host or context-specific context.xml file therefore the [/example-webapp] Context cannot be started.
tomcat-server    | at org.apache.catalina.startup.FailedContext.startInternal(FailedContext.java:229)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
tomcat-server    | ... 37 more
tomcat-server    | 22-Sep-2025 02:11:44.135 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/example-webapp] has finished in [150] ms
tomcat-server    | 22-Sep-2025 02:11:44.145 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
tomcat-server    | 22-Sep-2025 02:11:44.190 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [403] milliseconds
tomcat-mysql-db  | 2025-09-22T02:11:46.206917Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
tomcat-mysql-db  | 2025-09-22 02:11:50+00:00 [Note] [Entrypoint]: Database files initialized
tomcat-mysql-db  | 2025-09-22 02:11:50+00:00 [Note] [Entrypoint]: Starting temporary server
tomcat-mysql-db  | 2025-09-22T02:11:51.691048Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
tomcat-mysql-db  | 2025-09-22T02:11:51.728061Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.43) starting as process 124
tomcat-mysql-db  | 2025-09-22T02:11:51.770579Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
tomcat-mysql-db  | 2025-09-22T02:11:53.055068Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
tomcat-mysql-db  | 2025-09-22T02:11:54.290018Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
tomcat-mysql-db  | 2025-09-22T02:11:54.290155Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
tomcat-mysql-db  | 2025-09-22T02:11:54.297882Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
tomcat-mysql-db  | 2025-09-22T02:11:54.349742Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
tomcat-mysql-db  | 2025-09-22T02:11:54.350278Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.43'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server - GPL.
tomcat-mysql-db  | 2025-09-22 02:11:54+00:00 [Note] [Entrypoint]: Temporary server started.
tomcat-mysql-db  | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
tomcat-mysql-db  | 2025-09-22 02:12:00+00:00 [Note] [Entrypoint]: Creating database example_db
tomcat-mysql-db  | 
tomcat-mysql-db  | 2025-09-22 02:12:00+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/mysql-init.sql
tomcat-mysql-db  | idusernameagecreate_time
tomcat-mysql-db  | 1Alice222025-09-22 02:12:00
tomcat-mysql-db  | 2Bob252025-09-22 02:12:00
tomcat-mysql-db  | 3Charlie282025-09-22 02:12:00
tomcat-mysql-db  | 
tomcat-mysql-db  | 
tomcat-mysql-db  | 2025-09-22 02:12:00+00:00 [Note] [Entrypoint]: Stopping temporary server
tomcat-mysql-db  | 2025-09-22T02:12:00.726113Z 12 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.43).
tomcat-mysql-db  | 2025-09-22T02:12:02.241898Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.43)  MySQL Community Server - GPL.
tomcat-mysql-db  | 2025-09-22 02:12:02+00:00 [Note] [Entrypoint]: Temporary server stopped
tomcat-mysql-db  | 
tomcat-mysql-db  | 2025-09-22 02:12:02+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
tomcat-mysql-db  | 
tomcat-mysql-db  | 2025-09-22T02:12:03.171632Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
tomcat-mysql-db  | 2025-09-22T02:12:03.173878Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.43) starting as process 1
tomcat-mysql-db  | 2025-09-22T02:12:03.193609Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
tomcat-mysql-db  | 2025-09-22T02:12:03.509562Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
tomcat-mysql-db  | 2025-09-22T02:12:04.060983Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
tomcat-mysql-db  | 2025-09-22T02:12:04.061122Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
tomcat-mysql-db  | 2025-09-22T02:12:04.064970Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
tomcat-mysql-db  | 2025-09-22T02:12:04.134686Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
tomcat-mysql-db  | 2025-09-22T02:12:04.136485Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.43'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
bash 复制代码
[root@host1 tomcat-mysql]# docker compose ps
WARN[0000] /root/projects/tomcat-mysql/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
NAME              IMAGE            COMMAND                   SERVICE   CREATED          STATUS          PORTS
tomcat-mysql-db   mysql:8.0        "docker-entrypoint.s..."   mysql     14 seconds ago   Up 14 seconds   3306/tcp, 33060/tcp
tomcat-server     tomcat:9-jdk11   "catalina.sh run"         tomcat    14 seconds ago   Up 14 seconds   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp
[root@host1 tomcat-mysql]# docker logs -f tomcat-server
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
22-Sep-2025 02:19:24.180 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.109
22-Sep-2025 02:19:24.190 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Sep 1 2025 12:15:33 UTC
22-Sep-2025 02:19:24.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.109.0
22-Sep-2025 02:19:24.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
22-Sep-2025 02:19:24.192 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.14.0-611.el9.x86_64
22-Sep-2025 02:19:24.192 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
22-Sep-2025 02:19:24.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
22-Sep-2025 02:19:24.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.28+6
22-Sep-2025 02:19:24.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Eclipse Adoptium
22-Sep-2025 02:19:24.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
22-Sep-2025 02:19:24.195 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
22-Sep-2025 02:19:24.215 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
22-Sep-2025 02:19:24.216 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
22-Sep-2025 02:19:24.217 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
22-Sep-2025 02:19:24.218 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
22-Sep-2025 02:19:24.218 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
22-Sep-2025 02:19:24.219 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
22-Sep-2025 02:19:24.219 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
22-Sep-2025 02:19:24.219 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
22-Sep-2025 02:19:24.220 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
22-Sep-2025 02:19:24.220 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
22-Sep-2025 02:19:24.220 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
22-Sep-2025 02:19:24.221 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsun.io.useCanonCaches=false
22-Sep-2025 02:19:24.221 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
22-Sep-2025 02:19:24.222 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
22-Sep-2025 02:19:24.222 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
22-Sep-2025 02:19:24.223 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
22-Sep-2025 02:19:24.223 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
22-Sep-2025 02:19:24.233 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.2].
22-Sep-2025 02:19:24.233 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
22-Sep-2025 02:19:24.233 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
22-Sep-2025 02:19:24.242 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.13 30 Jan 2024]
22-Sep-2025 02:19:25.075 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
22-Sep-2025 02:19:25.132 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [1446] milliseconds
22-Sep-2025 02:19:25.260 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
22-Sep-2025 02:19:25.261 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.109]
22-Sep-2025 02:19:25.278 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
22-Sep-2025 02:19:25.315 SEVERE [main] org.apache.tomcat.util.digester.Digester.fatalError Parse fatal error at line [9] column [76]
org.xml.sax.SAXParseException; systemId: file:///usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:912)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1512)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1353)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1500)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.320 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying deployment descriptor [/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml]
org.xml.sax.SAXParseException; systemId: file:///usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1243)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1500)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.364 SEVERE [main] org.apache.tomcat.util.digester.Digester.fatalError Parse fatal error at line [9] column [76]
org.xml.sax.SAXParseException; systemId: file:/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:912)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1512)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1353)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1518)
at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:731)
at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:676)
at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:939)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:123)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:155)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.368 SEVERE [main] org.apache.catalina.startup.ContextConfig.processContextConfig Parse error in context.xml for [/example-webapp]
org.xml.sax.SAXParseException; systemId: file:/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:912)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1512)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1353)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1518)
at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:731)
at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:676)
at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:939)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:123)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:155)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.374 SEVERE [main] org.apache.catalina.startup.ContextConfig.processContextConfig Occurred at line [9] column [76]
22-Sep-2025 02:19:25.376 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
java.lang.IllegalStateException: Error starting child
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:602)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
Caused by: org.apache.catalina.LifecycleException: Failed to process either the global, per-host or context-specific context.xml file therefore the [/example-webapp] Context cannot be started.
at org.apache.catalina.startup.FailedContext.startInternal(FailedContext.java:229)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
... 37 more
22-Sep-2025 02:19:25.381 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/example-webapp] has finished in [102] ms
22-Sep-2025 02:19:25.395 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
22-Sep-2025 02:19:25.424 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [291] milliseconds
cd /root/projects/tomcat-mysql
^C[root@host1 tomcat-mysql]# 
[root@host1 tomcat-mysql]# docker logs -f tomcat-server
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
22-Sep-2025 02:19:24.180 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.109
22-Sep-2025 02:19:24.190 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Sep 1 2025 12:15:33 UTC
22-Sep-2025 02:19:24.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.109.0
22-Sep-2025 02:19:24.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
22-Sep-2025 02:19:24.192 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.14.0-611.el9.x86_64
22-Sep-2025 02:19:24.192 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
22-Sep-2025 02:19:24.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
22-Sep-2025 02:19:24.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.28+6
22-Sep-2025 02:19:24.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Eclipse Adoptium
22-Sep-2025 02:19:24.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
22-Sep-2025 02:19:24.195 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
22-Sep-2025 02:19:24.215 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
22-Sep-2025 02:19:24.216 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
22-Sep-2025 02:19:24.217 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
22-Sep-2025 02:19:24.218 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
22-Sep-2025 02:19:24.218 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
22-Sep-2025 02:19:24.219 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
22-Sep-2025 02:19:24.219 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
22-Sep-2025 02:19:24.219 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
22-Sep-2025 02:19:24.220 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
22-Sep-2025 02:19:24.220 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
22-Sep-2025 02:19:24.220 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
22-Sep-2025 02:19:24.221 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsun.io.useCanonCaches=false
22-Sep-2025 02:19:24.221 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
22-Sep-2025 02:19:24.222 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
22-Sep-2025 02:19:24.222 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
22-Sep-2025 02:19:24.223 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
22-Sep-2025 02:19:24.223 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
22-Sep-2025 02:19:24.233 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.2].
22-Sep-2025 02:19:24.233 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
22-Sep-2025 02:19:24.233 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
22-Sep-2025 02:19:24.242 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.13 30 Jan 2024]
22-Sep-2025 02:19:25.075 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
22-Sep-2025 02:19:25.132 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [1446] milliseconds
22-Sep-2025 02:19:25.260 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
22-Sep-2025 02:19:25.261 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.109]
22-Sep-2025 02:19:25.278 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
22-Sep-2025 02:19:25.315 SEVERE [main] org.apache.tomcat.util.digester.Digester.fatalError Parse fatal error at line [9] column [76]
org.xml.sax.SAXParseException; systemId: file:///usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:912)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1512)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1353)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1500)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.320 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying deployment descriptor [/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml]
org.xml.sax.SAXParseException; systemId: file:///usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1243)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1500)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.364 SEVERE [main] org.apache.tomcat.util.digester.Digester.fatalError Parse fatal error at line [9] column [76]
org.xml.sax.SAXParseException; systemId: file:/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:912)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1512)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1353)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1518)
at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:731)
at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:676)
at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:939)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:123)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:155)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.368 SEVERE [main] org.apache.catalina.startup.ContextConfig.processContextConfig Parse error in context.xml for [/example-webapp]
org.xml.sax.SAXParseException; systemId: file:/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:912)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1512)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1353)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1518)
at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:731)
at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:676)
at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:939)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:123)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:155)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.374 SEVERE [main] org.apache.catalina.startup.ContextConfig.processContextConfig Occurred at line [9] column [76]
22-Sep-2025 02:19:25.376 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
java.lang.IllegalStateException: Error starting child
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:602)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
Caused by: org.apache.catalina.LifecycleException: Failed to process either the global, per-host or context-specific context.xml file therefore the [/example-webapp] Context cannot be started.
at org.apache.catalina.startup.FailedContext.startInternal(FailedContext.java:229)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
... 37 more
22-Sep-2025 02:19:25.381 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/example-webapp] has finished in [102] ms
22-Sep-2025 02:19:25.395 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
22-Sep-2025 02:19:25.424 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [291] milliseconds
^C[root@host1 tomcat-mysql]# 
[root@host1 tomcat-mysql]# vi tomcat/webapps/example-webapp/META-INF/context.xml
[root@host1 tomcat-mysql]# cat tomcat/webapps/example-webapp/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true">
    <Resource 
        name="jdbc/ExampleDB"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="com.mysql.cj.jdbc.Driver"
        url="jdbc:mysql://mysql:3306/example_db?useSSL=false&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true"
        username="root"
        password="123456"
        maxTotal="100"
        maxIdle="20"
        minIdle="5"
        maxWaitMillis="10000"
    />
</Context>
[root@host1 tomcat-mysql]# vi docker-compose.yaml
[root@host1 tomcat-mysql]# cat docker-compose.yaml
services:
  # 1. MySQL 服务(自动执行初始化脚本)
  mysql:
    image: mysql:8.0  # 与 MySQL 驱动版本匹配(8.0.28 驱动适配 MySQL 8.0)
    container_name: tomcat-mysql-db
    environment:
      MYSQL_ROOT_PASSWORD: 123456  # 与 context.xml 中的 password 一致
      MYSQL_DATABASE: example_db   # 与 context.xml 中的数据库名一致
    volumes:
      # 挂载初始化 SQL 脚本,MySQL 启动时自动执行(创建表和测试数据)
      - ./dbinit/mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql
      # 挂载数据卷,持久化 MySQL 数据(重启容器数据不丢失)
      - mysql-data:/var/lib/mysql
    networks:
      - tomcat-mysql-net  # 自定义网络,让 Tomcat 能通过容器名访问 MySQL
    restart: always  # 容器异常时自动重启

  # 2. Tomcat 服务(挂载 Web 应用、MySQL 驱动)
  tomcat:
    image: tomcat:9-jdk11  # Tomcat 9 + JDK 11(适配 Java Web 应用)
    container_name: tomcat-server
    ports:
      - "8080:8080"  # 暴露 8080 端口,外部可访问
    volumes:
      # 挂载 Web 应用到 Tomcat 的 webapps 目录(容器内路径固定)
      - ./tomcat/webapps/example-webapp:/usr/local/tomcat/webapps/example-webapp
      # 挂载 MySQL 驱动到 Tomcat 容器的 lib 目录(解决驱动加载问题!)
      - ./tomcat/webapps/example-webapp/WEB-INF/lib/mysql-connector-java-8.0.28.jar:/usr/local/tomcat/lib/mysql-connector-java-8.0.28.jar
      # 可选:挂载 Tomcat 全局配置(如需自定义 server.xml 等)
      # - ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml
    depends_on:
      - mysql  # 确保 MySQL 先启动,再启动 Tomcat(避免连接失败)
    networks:
      - tomcat-mysql-net
    restart: always

# 定义网络(隔离项目网络,避免与其他容器冲突)
networks:
  tomcat-mysql-net:
    driver: bridge

# 定义数据卷(持久化 MySQL 数据)
volumes:
  mysql-data:

5.在浏览器访问 http://127.0.0.1:8080/example-webapp 进行测试

6.实验完毕,停止执行该 Compose 应用程序并清理上述项目

全过程代码:

bash 复制代码
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sun Sep 21 22:32:08 2025 from 192.168.197.1
[root@host1 ~]# cd /root/projects
-bash: cd: /root/projects: 没有那个文件或目录
[root@host1 ~]# mkdir -p /root/projects
[root@host1 ~]# cd /root/projects
[root@host1 projects]# mkdir tomcat-mysql
[root@host1 projects]# ls | grep tomcat-mysql
tomcat-mysql
[root@host1 projects]# cd tomcat-mysql
[root@host1 tomcat-mysql]# cd
[root@host1 ~]# tree tomcat-mysql
tomcat-mysql [error opening dir]

0 directories, 0 files
[root@host1 ~]# cd /root/projects
[root@host1 projects]# cd tomcat-mysql
[root@host1 tomcat-mysql]# tree tomcat-mysql
tomcat-mysql [error opening dir]

0 directories, 0 files
[root@host1 tomcat-mysql]# mkdir -p dbinit tomcat/webapps/example-webapp/META-INF tomcat/webapps/example-webapp/WEB-INF/lib
[root@host1 tomcat-mysql]# tree .
.
├── dbinit
└── tomcat
    └── webapps
        └── example-webapp
            ├── META-INF
            └── WEB-INF
                └── lib

7 directories, 0 files
[root@host1 tomcat-mysql]# vi dbinit/mysql-init.sql
[root@host1 tomcat-mysql]# cat dbinit/mysql-init.sql
-- 1. 创建数据库(名称需与JNDI配置中的URL一致,本例用 example_db)
CREATE DATABASE IF NOT EXISTS example_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 2. 使用数据库
USE example_db;

-- 3. 创建测试表(user表,用于JDBC查询)
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
  `username` VARCHAR(50) NOT NULL COMMENT '用户名',
  `age` INT COMMENT '年龄',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试用户表';

-- 4. 插入测试数据
INSERT INTO `user` (username, age) VALUES 
('Alice', 22),
('Bob', 25),
('Charlie', 28);

-- 验证数据
SELECT * FROM `user`;
[root@host1 tomcat-mysql]# vi tomcat/webapps/example-webapp/META-INF/context.xml
[root@host1 tomcat-mysql]# cat tomcat/webapps/example-webapp/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true"> <!-- reloadable="true":修改配置后Tomcat自动重载 -->

    <!-- 配置JNDI数据源:name="jdbc/ExampleDB" 是数据源的JNDI名称,后续JSP通过此名称查找 -->
    <Resource 
        name="jdbc/ExampleDB"                <!-- JNDI名称(自定义,后续JSP需对应) -->
        auth="Container"                     <!-- 认证方式:由Tomcat容器管理 -->
        type="javax.sql.DataSource"          <!-- 资源类型:数据源 -->
        driverClassName="com.mysql.cj.jdbc.Driver" <!-- MySQL 8.0+ 驱动类(注意是cj包下) -->
        url="jdbc:mysql://mysql:3306/example_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" <!-- 数据库URL:mysql是服务名(Docker部署时用),example_db是库名 -->
        username="root"                      <!-- 数据库用户名(根据实际MySQL配置,本例用root) -->
        password="123456"                    <!-- 数据库密码(根据实际MySQL配置) -->
        maxTotal="100"                       <!-- 连接池最大连接数 -->
        maxIdle="20"                         <!-- 连接池最大空闲连接数 -->
        minIdle="5"                          <!-- 连接池最小空闲连接数 -->
        maxWaitMillis="10000"                <!-- 获取连接的最大等待时间(毫秒) -->
    />

</Context>
[root@host1 tomcat-mysql]# vi tomcat/webapps/example-webapp/WEB-INF/web.xml
[root@host1 tomcat-mysql]# cat tomcat/webapps/example-webapp/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!-- 1. 欢迎页:访问应用根路径时默认打开的页面 -->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <!-- 2. 声明JNDI资源引用(与context.xml中的name对应) -->
    <resource-ref>
        <description>Example DB DataSource</description> <!-- 资源描述 -->
        <res-ref-name>jdbc/ExampleDB</res-ref-name>       <!-- 引用的JNDI名称(必须与context.xml一致 -->
        <res-type>javax.sql.DataSource</res-type>         <!-- 资源类型 -->
        <res-auth>Container</res-auth>                    <!-- 认证方式(与context.xml一致) -->
    </resource-ref>

</web-app>
[root@host1 tomcat-mysql]# cd tomcat/webapps/example-webapp/WEB-INF/lib
[root@host1 lib]# wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar
--2025-09-22 10:06:41--  https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar
正在解析主机 repo1.maven.org (repo1.maven.org)... 199.232.196.209, 199.232.192.209, 2a04:4e42:4c::209, ...
正在连接 repo1.maven.org (repo1.maven.org)|199.232.196.209|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2476480 (2.4M) [application/java-archive]
正在保存至: "mysql-connector-java-8.0.28.jar"

mysql-connector-java-8.0. 100%[==================================>]   2.36M  1.17MB/s  用时 2.0s    

2025-09-22 10:06:45 (1.17 MB/s) - 已保存 "mysql-connector-java-8.0.28.jar" [2476480/2476480])

[root@host1 lib]# cp mysql-connector-java-8.0.28.jar /usr/local/tomcat/lib/
cp: 无法创建普通文件'/usr/local/tomcat/lib/': 没有那个文件或目录
[root@host1 lib]# cd /root/projects/tomcat-mysql
[root@host1 tomcat-mysql]# vi docker-compose.yaml
[root@host1 tomcat-mysql]# cat docker-compose.yaml
version: '3.8'
services:
  # 1. MySQL 服务(自动执行初始化脚本)
  mysql:
    image: mysql:8.0  # 与 MySQL 驱动版本匹配(8.0.28 驱动适配 MySQL 8.0)
    container_name: tomcat-mysql-db
    environment:
      MYSQL_ROOT_PASSWORD: 123456  # 与 context.xml 中的 password 一致
      MYSQL_DATABASE: example_db   # 与 context.xml 中的数据库名一致
    volumes:
      # 挂载初始化 SQL 脚本,MySQL 启动时自动执行(创建表和测试数据)
      - ./dbinit/mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql
      # 挂载数据卷,持久化 MySQL 数据(重启容器数据不丢失)
      - mysql-data:/var/lib/mysql
    networks:
      - tomcat-mysql-net  # 自定义网络,让 Tomcat 能通过容器名访问 MySQL
    restart: always  # 容器异常时自动重启

  # 2. Tomcat 服务(挂载 Web 应用、MySQL 驱动)
  tomcat:
    image: tomcat:9-jdk11  # Tomcat 9 + JDK 11(适配 Java Web 应用)
    container_name: tomcat-server
    ports:
      - "8080:8080"  # 暴露 8080 端口,外部可访问
    volumes:
      # 挂载 Web 应用到 Tomcat 的 webapps 目录(容器内路径固定)
      - ./tomcat/webapps/example-webapp:/usr/local/tomcat/webapps/example-webapp
      # 挂载 MySQL 驱动到 Tomcat 容器的 lib 目录(解决驱动加载问题!)
      - ./tomcat/webapps/example-webapp/WEB-INF/lib/mysql-connector-java-8.0.28.jar:/usr/local/tomcat/lib/mysql-connector-java-8.0.28.jar
      # 可选:挂载 Tomcat 全局配置(如需自定义 server.xml 等)
      # - ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml
    depends_on:
      - mysql  # 确保 MySQL 先启动,再启动 Tomcat(避免连接失败)
    networks:
      - tomcat-mysql-net
    restart: always

# 定义网络(隔离项目网络,避免与其他容器冲突)
networks:
  tomcat-mysql-net:
    driver: bridge

# 定义数据卷(持久化 MySQL 数据)
volumes:
  mysql-data:
[root@host1 tomcat-mysql]# url="jdbc:mysql://mysql:3306/example_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"
[root@host1 tomcat-mysql]# docker-compose up -d
bash: docker-compose: 未找到命令...
[root@host1 tomcat-mysql]# docker compose up
WARN[0000] /root/projects/tomcat-mysql/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
[+] Running 21/21
 ✔ mysql Pulled                                                                                84.0s 
   ✔ 500d7b2546c4 Already exists                                                                0.0s 
   ✔ 48934deb9770 Pull complete                                                                19.4s 
   ✔ 021b6107b9d0 Pull complete                                                                23.2s 
   ✔ 13ed16089ebc Pull complete                                                                27.2s 
   ✔ e32dcaa70f77 Pull complete                                                                27.3s 
   ✔ 72a465986d66 Pull complete                                                                27.6s 
   ✔ 27fa9cc59961 Pull complete                                                                35.7s 
   ✔ 8a27c0ce790f Pull complete                                                                35.7s 
   ✔ 390885da77e4 Pull complete                                                                78.4s 
   ✔ 1ca2ca504238 Pull complete                                                                78.4s 
   ✔ d8f78235dcb8 Pull complete                                                                78.4s 
 ✔ tomcat Pulled                                                                               38.7s 
   ✔ 953cdd413371 Pull complete                                                                14.7s 
   ✔ 1eb43857d530 Pull complete                                                                17.6s 
   ✔ 30e90268e187 Pull complete                                                                32.1s 
   ✔ 4fcf4bcc7c79 Pull complete                                                                32.1s 
   ✔ c530a0862e0f Pull complete                                                                32.1s 
   ✔ d195232c3796 Pull complete                                                                32.1s 
   ✔ 4f4fb700ef54 Pull complete                                                                32.2s 
   ✔ 9f44622f62da Pull complete                                                                33.1s 
[+] Running 4/4
 ✔ Network tomcat-mysql_tomcat-mysql-net  Created                                               0.1s 
 ✔ Volume "tomcat-mysql_mysql-data"       Created                                               0.0s 
 ✔ Container tomcat-mysql-db              Created                                               1.4s 
 ✔ Container tomcat-server                Created                                               0.0s 
Attaching to tomcat-mysql-db, tomcat-server
tomcat-mysql-db  | 2025-09-22 02:11:40+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.43-1.el9 started.
tomcat-server    | NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
tomcat-mysql-db  | 2025-09-22 02:11:41+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
tomcat-mysql-db  | 2025-09-22 02:11:41+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.43-1.el9 started.
tomcat-mysql-db  | 2025-09-22 02:11:41+00:00 [Note] [Entrypoint]: Initializing database files
tomcat-mysql-db  | 2025-09-22T02:11:41.725897Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
tomcat-mysql-db  | 2025-09-22T02:11:41.726270Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.43) initializing of server in progress as process 80
tomcat-mysql-db  | 2025-09-22T02:11:41.747515Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
tomcat-server    | 22-Sep-2025 02:11:42.465 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.109
tomcat-server    | 22-Sep-2025 02:11:42.475 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Sep 1 2025 12:15:33 UTC
tomcat-server    | 22-Sep-2025 02:11:42.476 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.109.0
tomcat-server    | 22-Sep-2025 02:11:42.477 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
tomcat-server    | 22-Sep-2025 02:11:42.477 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.14.0-611.el9.x86_64
tomcat-server    | 22-Sep-2025 02:11:42.477 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
tomcat-server    | 22-Sep-2025 02:11:42.477 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
tomcat-server    | 22-Sep-2025 02:11:42.478 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.28+6
tomcat-server    | 22-Sep-2025 02:11:42.478 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Eclipse Adoptium
tomcat-server    | 22-Sep-2025 02:11:42.479 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
tomcat-server    | 22-Sep-2025 02:11:42.479 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
tomcat-server    | 22-Sep-2025 02:11:42.505 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.506 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.506 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.508 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.509 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.509 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
tomcat-server    | 22-Sep-2025 02:11:42.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
tomcat-server    | 22-Sep-2025 02:11:42.511 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
tomcat-server    | 22-Sep-2025 02:11:42.511 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
tomcat-server    | 22-Sep-2025 02:11:42.512 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
tomcat-server    | 22-Sep-2025 02:11:42.512 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsun.io.useCanonCaches=false
tomcat-server    | 22-Sep-2025 02:11:42.513 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
tomcat-server    | 22-Sep-2025 02:11:42.513 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
tomcat-server    | 22-Sep-2025 02:11:42.514 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
tomcat-server    | 22-Sep-2025 02:11:42.514 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
tomcat-server    | 22-Sep-2025 02:11:42.514 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
tomcat-server    | 22-Sep-2025 02:11:42.529 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.2].
tomcat-server    | 22-Sep-2025 02:11:42.529 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
tomcat-server    | 22-Sep-2025 02:11:42.530 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
tomcat-server    | 22-Sep-2025 02:11:42.547 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.13 30 Jan 2024]
tomcat-server    | 22-Sep-2025 02:11:43.717 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
tomcat-server    | 22-Sep-2025 02:11:43.786 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [1940] milliseconds
tomcat-mysql-db  | 2025-09-22T02:11:43.804662Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
tomcat-server    | 22-Sep-2025 02:11:43.958 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
tomcat-server    | 22-Sep-2025 02:11:43.959 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.109]
tomcat-server    | 22-Sep-2025 02:11:43.983 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
tomcat-server    | 22-Sep-2025 02:11:44.027 SEVERE [main] org.apache.tomcat.util.digester.Digester.fatalError Parse fatal error at line [6] column [46]
tomcat-server    | org.xml.sax.SAXParseException; systemId: file:///usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 6; columnNumber: 46; Element type "Resource" must be followed by either attribute specifications, ">" or "/>".
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.seekCloseOfStartTag(XMLDocumentFragmentScannerImpl.java:1433)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1362)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
tomcat-server    | at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1500)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)
tomcat-server    | at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
tomcat-server    | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
tomcat-server    | at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
tomcat-server    | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
tomcat-server    | at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
tomcat-server    | at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
tomcat-server    | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat-server    | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
tomcat-server    | 22-Sep-2025 02:11:44.034 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying deployment descriptor [/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml]
tomcat-server    | org.xml.sax.SAXParseException; systemId: file:///usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 6; columnNumber: 46; Element type "Resource" must be followed by either attribute specifications, ">" or "/>".
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1243)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
tomcat-server    | at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1500)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)
tomcat-server    | at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
tomcat-server    | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
tomcat-server    | at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
tomcat-server    | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
tomcat-server    | at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
tomcat-server    | at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
tomcat-server    | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat-server    | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
tomcat-server    | 22-Sep-2025 02:11:44.120 SEVERE [main] org.apache.tomcat.util.digester.Digester.fatalError Parse fatal error at line [6] column [46]
tomcat-server    | org.xml.sax.SAXParseException; systemId: file:/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 6; columnNumber: 46; Element type "Resource" must be followed by either attribute specifications, ">" or "/>".
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.seekCloseOfStartTag(XMLDocumentFragmentScannerImpl.java:1433)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1362)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
tomcat-server    | at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1518)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:731)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:676)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:939)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:123)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:155)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
tomcat-server    | at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
tomcat-server    | at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
tomcat-server    | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
tomcat-server    | at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
tomcat-server    | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
tomcat-server    | at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
tomcat-server    | at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
tomcat-server    | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat-server    | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
tomcat-server    | 22-Sep-2025 02:11:44.123 SEVERE [main] org.apache.catalina.startup.ContextConfig.processContextConfig Parse error in context.xml for [/example-webapp]
tomcat-server    | org.xml.sax.SAXParseException; systemId: file:/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 6; columnNumber: 46; Element type "Resource" must be followed by either attribute specifications, ">" or "/>".
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.seekCloseOfStartTag(XMLDocumentFragmentScannerImpl.java:1433)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1362)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
tomcat-server    | at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
tomcat-server    | at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1518)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:731)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:676)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:939)
tomcat-server    | at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:123)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:155)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
tomcat-server    | at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
tomcat-server    | at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
tomcat-server    | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
tomcat-server    | at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
tomcat-server    | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
tomcat-server    | at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
tomcat-server    | at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
tomcat-server    | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat-server    | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
tomcat-server    | 22-Sep-2025 02:11:44.124 SEVERE [main] org.apache.catalina.startup.ContextConfig.processContextConfig Occurred at line [6] column [46]
tomcat-server    | 22-Sep-2025 02:11:44.131 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
tomcat-server    | java.lang.IllegalStateException: Error starting child
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:602)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
tomcat-server    | at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
tomcat-server    | at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
tomcat-server    | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
tomcat-server    | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
tomcat-server    | at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
tomcat-server    | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
tomcat-server    | at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
tomcat-server    | at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
tomcat-server    | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
tomcat-server    | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
tomcat-server    | at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
tomcat-server    | at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
tomcat-server    | at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tomcat-server    | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
tomcat-server    | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat-server    | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
tomcat-server    | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
tomcat-server    | Caused by: org.apache.catalina.LifecycleException: Failed to process either the global, per-host or context-specific context.xml file therefore the [/example-webapp] Context cannot be started.
tomcat-server    | at org.apache.catalina.startup.FailedContext.startInternal(FailedContext.java:229)
tomcat-server    | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
tomcat-server    | at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
tomcat-server    | ... 37 more
tomcat-server    | 22-Sep-2025 02:11:44.135 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/example-webapp] has finished in [150] ms
tomcat-server    | 22-Sep-2025 02:11:44.145 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
tomcat-server    | 22-Sep-2025 02:11:44.190 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [403] milliseconds
tomcat-mysql-db  | 2025-09-22T02:11:46.206917Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
tomcat-mysql-db  | 2025-09-22 02:11:50+00:00 [Note] [Entrypoint]: Database files initialized
tomcat-mysql-db  | 2025-09-22 02:11:50+00:00 [Note] [Entrypoint]: Starting temporary server
tomcat-mysql-db  | 2025-09-22T02:11:51.691048Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
tomcat-mysql-db  | 2025-09-22T02:11:51.728061Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.43) starting as process 124
tomcat-mysql-db  | 2025-09-22T02:11:51.770579Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
tomcat-mysql-db  | 2025-09-22T02:11:53.055068Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
tomcat-mysql-db  | 2025-09-22T02:11:54.290018Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
tomcat-mysql-db  | 2025-09-22T02:11:54.290155Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
tomcat-mysql-db  | 2025-09-22T02:11:54.297882Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
tomcat-mysql-db  | 2025-09-22T02:11:54.349742Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
tomcat-mysql-db  | 2025-09-22T02:11:54.350278Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.43'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server - GPL.
tomcat-mysql-db  | 2025-09-22 02:11:54+00:00 [Note] [Entrypoint]: Temporary server started.
tomcat-mysql-db  | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
tomcat-mysql-db  | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
tomcat-mysql-db  | 2025-09-22 02:12:00+00:00 [Note] [Entrypoint]: Creating database example_db
tomcat-mysql-db  | 
tomcat-mysql-db  | 2025-09-22 02:12:00+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/mysql-init.sql
tomcat-mysql-db  | idusernameagecreate_time
tomcat-mysql-db  | 1Alice222025-09-22 02:12:00
tomcat-mysql-db  | 2Bob252025-09-22 02:12:00
tomcat-mysql-db  | 3Charlie282025-09-22 02:12:00
tomcat-mysql-db  | 
tomcat-mysql-db  | 
tomcat-mysql-db  | 2025-09-22 02:12:00+00:00 [Note] [Entrypoint]: Stopping temporary server
tomcat-mysql-db  | 2025-09-22T02:12:00.726113Z 12 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.43).
tomcat-mysql-db  | 2025-09-22T02:12:02.241898Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.43)  MySQL Community Server - GPL.
tomcat-mysql-db  | 2025-09-22 02:12:02+00:00 [Note] [Entrypoint]: Temporary server stopped
tomcat-mysql-db  | 
tomcat-mysql-db  | 2025-09-22 02:12:02+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
tomcat-mysql-db  | 
tomcat-mysql-db  | 2025-09-22T02:12:03.171632Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
tomcat-mysql-db  | 2025-09-22T02:12:03.173878Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.43) starting as process 1
tomcat-mysql-db  | 2025-09-22T02:12:03.193609Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
tomcat-mysql-db  | 2025-09-22T02:12:03.509562Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
tomcat-mysql-db  | 2025-09-22T02:12:04.060983Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
tomcat-mysql-db  | 2025-09-22T02:12:04.061122Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
tomcat-mysql-db  | 2025-09-22T02:12:04.064970Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
tomcat-mysql-db  | 2025-09-22T02:12:04.134686Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
tomcat-mysql-db  | 2025-09-22T02:12:04.136485Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.43'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
bash 复制代码
Caused by: org.apache.catalina.LifecycleException: Failed to process either the global, per-host or context-specific context.xml file therefore the [/example-webapp] Context cannot be started.
at org.apache.catalina.startup.FailedContext.startInternal(FailedContext.java:229)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
... 37 more
22-Sep-2025 02:19:25.381 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/example-webapp] has finished in [102] ms
22-Sep-2025 02:19:25.395 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
22-Sep-2025 02:19:25.424 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [291] milliseconds
cd /root/projects/tomcat-mysql
^C[root@host1 tomcat-mysql]# 
[root@host1 tomcat-mysql]# docker logs -f tomcat-server
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
22-Sep-2025 02:19:24.180 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.109
22-Sep-2025 02:19:24.190 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Sep 1 2025 12:15:33 UTC
22-Sep-2025 02:19:24.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.109.0
22-Sep-2025 02:19:24.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
22-Sep-2025 02:19:24.192 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.14.0-611.el9.x86_64
22-Sep-2025 02:19:24.192 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
22-Sep-2025 02:19:24.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
22-Sep-2025 02:19:24.193 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.28+6
22-Sep-2025 02:19:24.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Eclipse Adoptium
22-Sep-2025 02:19:24.194 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
22-Sep-2025 02:19:24.195 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
22-Sep-2025 02:19:24.215 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
22-Sep-2025 02:19:24.216 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
22-Sep-2025 02:19:24.217 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
22-Sep-2025 02:19:24.218 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
22-Sep-2025 02:19:24.218 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
22-Sep-2025 02:19:24.219 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
22-Sep-2025 02:19:24.219 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
22-Sep-2025 02:19:24.219 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
22-Sep-2025 02:19:24.220 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
22-Sep-2025 02:19:24.220 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
22-Sep-2025 02:19:24.220 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
22-Sep-2025 02:19:24.221 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsun.io.useCanonCaches=false
22-Sep-2025 02:19:24.221 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
22-Sep-2025 02:19:24.222 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
22-Sep-2025 02:19:24.222 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
22-Sep-2025 02:19:24.223 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
22-Sep-2025 02:19:24.223 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
22-Sep-2025 02:19:24.233 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.2].
22-Sep-2025 02:19:24.233 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
22-Sep-2025 02:19:24.233 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
22-Sep-2025 02:19:24.242 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.13 30 Jan 2024]
22-Sep-2025 02:19:25.075 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
22-Sep-2025 02:19:25.132 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [1446] milliseconds
22-Sep-2025 02:19:25.260 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
22-Sep-2025 02:19:25.261 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.109]
22-Sep-2025 02:19:25.278 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
22-Sep-2025 02:19:25.315 SEVERE [main] org.apache.tomcat.util.digester.Digester.fatalError Parse fatal error at line [9] column [76]
org.xml.sax.SAXParseException; systemId: file:///usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:912)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1512)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1353)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1500)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.320 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying deployment descriptor [/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml]
org.xml.sax.SAXParseException; systemId: file:///usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1243)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1500)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1134)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.364 SEVERE [main] org.apache.tomcat.util.digester.Digester.fatalError Parse fatal error at line [9] column [76]
org.xml.sax.SAXParseException; systemId: file:/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:912)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1512)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1353)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1518)
at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:731)
at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:676)
at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:939)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:123)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:155)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.368 SEVERE [main] org.apache.catalina.startup.ContextConfig.processContextConfig Parse error in context.xml for [/example-webapp]
org.xml.sax.SAXParseException; systemId: file:/usr/local/tomcat/webapps/example-webapp/META-INF/context.xml; lineNumber: 9; columnNumber: 76; The reference to entity "serverTimezone" must end with the ';' delimiter.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:912)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1512)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1353)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1518)
at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:731)
at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:676)
at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:939)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:123)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:155)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
22-Sep-2025 02:19:25.374 SEVERE [main] org.apache.catalina.startup.ContextConfig.processContextConfig Occurred at line [9] column [76]
22-Sep-2025 02:19:25.376 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
java.lang.IllegalStateException: Error starting child
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:602)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:604)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1174)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1883)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1085)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1579)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:722)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:739)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
Caused by: org.apache.catalina.LifecycleException: Failed to process either the global, per-host or context-specific context.xml file therefore the [/example-webapp] Context cannot be started.
at org.apache.catalina.startup.FailedContext.startInternal(FailedContext.java:229)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
... 37 more
22-Sep-2025 02:19:25.381 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/example-webapp] has finished in [102] ms
22-Sep-2025 02:19:25.395 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
22-Sep-2025 02:19:25.424 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [291] milliseconds
^C[root@host1 tomcat-mysql]# 
[root@host1 tomcat-mysql]# vi tomcat/webapps/example-webapp/META-INF/context.xml
[root@host1 tomcat-mysql]# cat tomcat/webapps/example-webapp/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true">
    <Resource 
        name="jdbc/ExampleDB"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="com.mysql.cj.jdbc.Driver"
        url="jdbc:mysql://mysql:3306/example_db?useSSL=false&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true"
        username="root"
        password="123456"
        maxTotal="100"
        maxIdle="20"
        minIdle="5"
        maxWaitMillis="10000"
    />
</Context>
[root@host1 tomcat-mysql]# vi docker-compose.yaml
[root@host1 tomcat-mysql]# cat docker-compose.yaml
services:
  # 1. MySQL 服务(自动执行初始化脚本)
  mysql:
    image: mysql:8.0  # 与 MySQL 驱动版本匹配(8.0.28 驱动适配 MySQL 8.0)
    container_name: tomcat-mysql-db
    environment:
      MYSQL_ROOT_PASSWORD: 123456  # 与 context.xml 中的 password 一致
      MYSQL_DATABASE: example_db   # 与 context.xml 中的数据库名一致
    volumes:
      # 挂载初始化 SQL 脚本,MySQL 启动时自动执行(创建表和测试数据)
      - ./dbinit/mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql
      # 挂载数据卷,持久化 MySQL 数据(重启容器数据不丢失)
      - mysql-data:/var/lib/mysql
    networks:
      - tomcat-mysql-net  # 自定义网络,让 Tomcat 能通过容器名访问 MySQL
    restart: always  # 容器异常时自动重启

  # 2. Tomcat 服务(挂载 Web 应用、MySQL 驱动)
  tomcat:
    image: tomcat:9-jdk11  # Tomcat 9 + JDK 11(适配 Java Web 应用)
    container_name: tomcat-server
    ports:
      - "8080:8080"  # 暴露 8080 端口,外部可访问
    volumes:
      # 挂载 Web 应用到 Tomcat 的 webapps 目录(容器内路径固定)
      - ./tomcat/webapps/example-webapp:/usr/local/tomcat/webapps/example-webapp
      # 挂载 MySQL 驱动到 Tomcat 容器的 lib 目录(解决驱动加载问题!)
      - ./tomcat/webapps/example-webapp/WEB-INF/lib/mysql-connector-java-8.0.28.jar:/usr/local/tomcat/lib/mysql-connector-java-8.0.28.jar
      # 可选:挂载 Tomcat 全局配置(如需自定义 server.xml 等)
      # - ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml
    depends_on:
      - mysql  # 确保 MySQL 先启动,再启动 Tomcat(避免连接失败)
    networks:
      - tomcat-mysql-net
    restart: always

# 定义网络(隔离项目网络,避免与其他容器冲突)
networks:
  tomcat-mysql-net:
    driver: bridge

# 定义数据卷(持久化 MySQL 数据)
volumes:
  mysql-data:
[root@host1 tomcat-mysql]# docker compose down
[+] Running 3/3
 ✔ Container tomcat-server                Removed                                               0.5s 
 ✔ Container tomcat-mysql-db              Removed                                               1.0s 
 ✔ Network tomcat-mysql_tomcat-mysql-net  Removed                                               0.2s 
[root@host1 tomcat-mysql]# docker compose up -d
[+] Running 3/3
 ✔ Network tomcat-mysql_tomcat-mysql-net  Created                                               0.1s 
 ✔ Container tomcat-mysql-db              Started                                               0.5s 
 ✔ Container tomcat-server                Started                                               0.8s 
[root@host1 tomcat-mysql]# docker logs -f tomcat-server
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
22-Sep-2025 02:23:05.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.109
22-Sep-2025 02:23:05.981 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Sep 1 2025 12:15:33 UTC
22-Sep-2025 02:23:05.982 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.109.0
22-Sep-2025 02:23:05.983 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
22-Sep-2025 02:23:05.984 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.14.0-611.el9.x86_64
22-Sep-2025 02:23:05.984 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
22-Sep-2025 02:23:05.984 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
22-Sep-2025 02:23:05.985 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.28+6
22-Sep-2025 02:23:05.985 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Eclipse Adoptium
22-Sep-2025 02:23:05.986 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
22-Sep-2025 02:23:05.986 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
22-Sep-2025 02:23:06.009 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
22-Sep-2025 02:23:06.010 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
22-Sep-2025 02:23:06.010 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
22-Sep-2025 02:23:06.011 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
22-Sep-2025 02:23:06.011 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
22-Sep-2025 02:23:06.012 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
22-Sep-2025 02:23:06.012 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
22-Sep-2025 02:23:06.013 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
22-Sep-2025 02:23:06.014 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
22-Sep-2025 02:23:06.015 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
22-Sep-2025 02:23:06.015 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
22-Sep-2025 02:23:06.016 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsun.io.useCanonCaches=false
22-Sep-2025 02:23:06.016 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
22-Sep-2025 02:23:06.017 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
22-Sep-2025 02:23:06.017 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
22-Sep-2025 02:23:06.017 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
22-Sep-2025 02:23:06.017 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
22-Sep-2025 02:23:06.026 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.2].
22-Sep-2025 02:23:06.027 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
22-Sep-2025 02:23:06.027 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
22-Sep-2025 02:23:06.038 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.13 30 Jan 2024]
22-Sep-2025 02:23:06.864 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
22-Sep-2025 02:23:06.930 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [1408] milliseconds
22-Sep-2025 02:23:07.079 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
22-Sep-2025 02:23:07.080 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.109]
22-Sep-2025 02:23:07.100 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/example-webapp]
22-Sep-2025 02:23:08.430 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
22-Sep-2025 02:23:08.549 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/example-webapp] has finished in [1,447] ms
22-Sep-2025 02:23:08.560 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
22-Sep-2025 02:23:08.593 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [1661] milliseconds
^C[root@host1 tomcat-mysql]# 
[root@host1 tomcat-mysql]# docker compose ps
NAME              IMAGE            COMMAND                   SERVICE   CREATED         STATUS         PORTS
tomcat-mysql-db   mysql:8.0        "docker-entrypoint.s..."   mysql     2 minutes ago   Up 2 minutes   3306/tcp, 33060/tcp
tomcat-server     tomcat:9-jdk11   "catalina.sh run"         tomcat    2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp
[root@host1 tomcat-mysql]# ls tomcat/webapps/example-webapp
META-INF  WEB-INF
[root@host1 tomcat-mysql]# vi tomcat/webapps/example-webapp/index.jsp
[root@host1 tomcat-mysql]# cat tomcat/webapps/example-webapp/index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Tomcat-MySQL JNDI 测试入口</title>
    <style>body { font-family: Arial; margin: 20px; }</style>
</head>
<body>
    <h1>Tomcat-MySQL JNDI 测试示例</h1>
    <ul>
        <li><a href="test-datasource.jsp">测试JNDI数据源(获取连接)</a></li>
        <li><a href="test-jdbc.jsp">测试JDBC查询(通过JNDI数据源查用户表)</a></li>
        <li><a href="test-jndi.jsp">测试JNDI查找(验证资源是否存在)</a></li>
        <li><a href="test-attributes.jsp">(可选)测试请求属性</a></li>
        <li><a href="test-filesystem.jsp">(可选)测试文件系统</a></li>
    </ul>
</body>
</html>
[root@host1 tomcat-mysql]# vi tomcat/webapps/example-webapp/test-datasource.jsp
[root@host1 tomcat-mysql]# cat tomcat/webapps/example-webapp/test-datasource.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.sql.DataSource" %>
<%@ page import="java.sql.Connection" %>
<html>
<head>
    <title>测试JNDI数据源</title>
    <style>body { font-family: Arial; margin: 20px; color: #333; }</style>
</head>
<body>
    <h1>测试JNDI数据源(jdbc/ExampleDB)</h1>
    <%
        Connection conn = null;
        try {
            // 1. 初始化JNDI上下文
            Context ctx = new InitialContext();
            // 2. 查找JNDI数据源(名称需与context.xml一致,前缀java:comp/env/是固定格式)
            DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/ExampleDB");
            // 3. 从数据源获取数据库连接
            conn = ds.getConnection();
            
            if (conn != null && !conn.isClosed()) {
                out.println("<p style='color: green;'>✅ 成功获取JNDI数据源!</p>");
                out.println("<p>✅ 成功创建数据库连接!</p>");
                out.println("<p>连接信息:" + conn.toString() + "</p>");
            }
        } catch (Exception e) {
            out.println("<p style='color: red;'>❌ 数据源获取失败!</p>");
            out.println("<p>错误信息:" + e.getMessage() + "</p>");
            e.printStackTrace();
        } finally {
            // 4. 关闭连接(放回连接池)
            if (conn != null && !conn.isClosed()) {
                conn.close();
            }
        }
    %>
    <p><a href="index.jsp">返回首页</a></p>
</body>
</html>
[root@host1 tomcat-mysql]# vi tomcat/webapps/example-webapp/test-jdbc.jsp
[root@host1 tomcat-mysql]# cat tomcat/webapps/example-webapp/test-jdbc.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.sql.DataSource" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.text.SimpleDateFormat" %>
<html>
<head>
    <title>测试JDBC查询(通过JNDI数据源)</title>
    <style>
        body { font-family: Arial; margin: 20px; }
        table { border-collapse: collapse; width: 80%; margin-top: 20px; }
        th, td { border: 1px solid #ddd; padding: 10px; text-align: center; }
        th { background-color: #f5f5f5; }
    </style>
</head>
<body>
    <h1>JDBC查询测试(查询user表数据)</h1>
    <%
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            // 1. 通过JNDI获取数据源
            Context ctx = new InitialContext();
            DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/ExampleDB");
            conn = ds.getConnection();
            
            // 2. 执行JDBC查询(查询user表)
            String sql = "SELECT id, username, age, create_time FROM user ORDER BY id";
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            
            out.println("<p style='color: green;'>✅ 成功通过JNDI数据源执行JDBC查询!</p>");
            out.println("<table>");
            out.println("<tr><th>ID</th><th>用户名</th><th>年龄</th><th>创建时间</th></tr>");
            
            // 3. 解析结果集
            while (rs.next()) {
                out.println("<tr>");
                out.println("<td>" + rs.getInt("id") + "</td>");
                out.println("<td>" + rs.getString("username") + "</td>");
                out.println("<td>" + rs.getInt("age") + "</td>");
                out.println("<td>" + sdf.format(rs.getTimestamp("create_time")) + "</td>");
                out.println("</tr>");
            }
            out.println("</table>");
        } catch (Exception e) {
            out.println("<p style='color: red;'>❌ JDBC查询失败!</p>");
            out.println("<p>错误信息:" + e.getMessage() + "</p>");
            e.printStackTrace();
        } finally {
            // 4. 关闭资源(按ResultSet → PreparedStatement → Connection顺序)
            if (rs != null) rs.close();
            if (pstmt != null) pstmt.close();
            if (conn != null && !conn.isClosed()) conn.close();
        }
    %>
    <p><a href="index.jsp">返回首页</a></p>
</body>
</html>
[root@host1 tomcat-mysql]# vi tomcat/webapps/example-webapp/test-jndi.jsp
[root@host1 tomcat-mysql]# cat tomcat/webapps/example-webapp/test-jndi.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.naming.NamingEnumeration" %>
<%@ page import="javax.naming.NameClassPair" %>
<html>
<head>
    <title>测试JNDI查找</title>
    <style>body { font-family: Arial; margin: 20px; }</style>
</head>
<body>
    <h1>测试JNDI查找(验证资源)</h1>
    <%
        try {
            // 1. 初始化JNDI上下文
            Context ctx = new InitialContext();
            // 2. 查找JNDI环境上下文(java:comp/env/是Web应用的JNDI命名空间)
            Context envCtx = (Context) ctx.lookup("java:comp/env");
            
            out.println("<p>✅ 成功获取JNDI环境上下文(java:comp/env)</p>");
            out.println("<h3>当前JNDI命名空间下的资源:</h3>");
            out.println("<ul>");
            
            // 3. 列举所有JNDI资源(验证jdbc/ExampleDB是否存在)
            NamingEnumeration<NameClassPair> enumeration = envCtx.list("");
            while (enumeration.hasMoreElements()) {
                NameClassPair pair = enumeration.nextElement();
                out.println("<li>资源名称:" + pair.getName() + " → 资源类型:" + pair.getClassName() + "</li>");
            }
            out.println("</ul>");
            
            // 4. 单独验证数据源资源
            Object dsObj = envCtx.lookup("jdbc/ExampleDB");
            if (dsObj != null) {
                out.println("<p style='color: green;'>✅ 成功找到JNDI数据源:jdbc/ExampleDB</p>");
                out.println("<p>数据源类型:" + dsObj.getClass().getName() + "</p>");
            }
        } catch (Exception e) {
            out.println("<p style='color: red;'>❌ JNDI查找失败!</p>");
            out.println("<p>错误信息:" + e.getMessage() + "</p>");
            e.printStackTrace();
        }
    %>
    <p><a href="index.jsp">返回首页</a></p>
</body>
</html>
[root@host1 tomcat-mysql]# mysql -u root -p < dbinit/mysql-init.sql
bash: mysql: 未找到命令...
提供此文件的软件包是:
'mariadb'
'mysql'
[root@host1 tomcat-mysql]# yum install -y mysql
上次元数据过期检查:0:52:03 前,执行于 2025年09月22日 星期一 09时40分14秒。
依赖关系解决。
=====================================================================================================
 软件包                              架构            版本                   仓库                大小
=====================================================================================================
安装:
 mysql                               x86_64          8.0.41-2.el9           appstream          2.8 M
安装依赖关系:
 mariadb-connector-c-config          noarch          3.2.6-1.el9            appstream           11 k
 mysql-common                        x86_64          8.0.41-2.el9           appstream           73 k

事务概要
=====================================================================================================
安装  3 软件包

总下载:2.9 M
安装大小:60 M
下载软件包:
(1/3): mariadb-connector-c-config-3.2.6-1.el9.noarch.rpm             1.9 kB/s |  11 kB     00:05    
(2/3): mysql-common-8.0.41-2.el9.x86_64.rpm                           13 kB/s |  73 kB     00:05    
(3/3): mysql-8.0.41-2.el9.x86_64.rpm                                 487 kB/s | 2.8 MB     00:05    
-----------------------------------------------------------------------------------------------------
总计                                                                 500 kB/s | 2.9 MB     00:05     
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
  准备中  :                                                                                      1/1 
  安装    : mariadb-connector-c-config-3.2.6-1.el9.noarch                                        1/3 
  安装    : mysql-common-8.0.41-2.el9.x86_64                                                     2/3 
  安装    : mysql-8.0.41-2.el9.x86_64                                                            3/3 
  运行脚本: mysql-8.0.41-2.el9.x86_64                                                            3/3 
  验证    : mariadb-connector-c-config-3.2.6-1.el9.noarch                                        1/3 
  验证    : mysql-8.0.41-2.el9.x86_64                                                            2/3 
  验证    : mysql-common-8.0.41-2.el9.x86_64                                                     3/3 

已安装:
  mariadb-connector-c-config-3.2.6-1.el9.noarch               mysql-8.0.41-2.el9.x86_64              
  mysql-common-8.0.41-2.el9.x86_64                           

完毕!
[root@host1 tomcat-mysql]# mysql -u root -p < dbinit/mysql-init.sql
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@host1 tomcat-mysql]# systemctl status mysqld
Unit mysqld.service could not be found.
[root@host1 tomcat-mysql]# systemctl start mysqld
Failed to start mysqld.service: Unit mysqld.service not found.
[root@host1 tomcat-mysql]# yum install -y mysql-server
上次元数据过期检查:0:55:01 前,执行于 2025年09月22日 星期一 09时40分14秒。
依赖关系解决。
=====================================================================================================
 软件包                    架构               版本                       仓库                   大小
=====================================================================================================
安装:
 mysql-server              x86_64             8.0.41-2.el9               appstream              17 M
安装依赖关系:
 mecab                     x86_64             0.996-3.el9.4              appstream             356 k
 mysql-errmsg              x86_64             8.0.41-2.el9               appstream             507 k
 mysql-selinux             noarch             1.0.14-1.el9               appstream              36 k
 protobuf-lite             x86_64             3.14.0-16.el9              appstream             233 k

事务概要
=====================================================================================================
安装  5 软件包

总下载:18 M
安装大小:120 M
下载软件包:
(1/5): mysql-selinux-1.0.14-1.el9.noarch.rpm                         6.4 kB/s |  36 kB     00:05    
(2/5): mecab-0.996-3.el9.4.x86_64.rpm                                 62 kB/s | 356 kB     00:05    
(3/5): mysql-errmsg-8.0.41-2.el9.x86_64.rpm                           50 kB/s | 507 kB     00:10    
(4/5): protobuf-lite-3.14.0-16.el9.x86_64.rpm                         52 kB/s | 233 kB     00:04    
(5/5): mysql-server-8.0.41-2.el9.x86_64.rpm                          2.8 MB/s |  17 MB     00:05    
-----------------------------------------------------------------------------------------------------
总计                                                                 1.5 MB/s |  18 MB     00:11     
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
  准备中  :                                                                                      1/1 
  安装    : protobuf-lite-3.14.0-16.el9.x86_64                                                   1/5 
  运行脚本: mysql-selinux-1.0.14-1.el9.noarch                                                    2/5 
  安装    : mysql-selinux-1.0.14-1.el9.noarch                                                    2/5 
  运行脚本: mysql-selinux-1.0.14-1.el9.noarch                                                    2/5 
libsemanage.semanage_direct_install_info: Overriding mysql module at lower priority 100 with module at priority 200.

  安装    : mysql-errmsg-8.0.41-2.el9.x86_64                                                     3/5 
  安装    : mecab-0.996-3.el9.4.x86_64                                                           4/5 
  运行脚本: mysql-server-8.0.41-2.el9.x86_64                                                     5/5 
  安装    : mysql-server-8.0.41-2.el9.x86_64                                                     5/5 
  运行脚本: mysql-server-8.0.41-2.el9.x86_64                                                     5/5 
  运行脚本: mysql-selinux-1.0.14-1.el9.noarch                                                    5/5 
  运行脚本: mysql-server-8.0.41-2.el9.x86_64                                                     5/5 
  验证    : mecab-0.996-3.el9.4.x86_64                                                           1/5 
  验证    : mysql-errmsg-8.0.41-2.el9.x86_64                                                     2/5 
  验证    : mysql-selinux-1.0.14-1.el9.noarch                                                    3/5 
  验证    : mysql-server-8.0.41-2.el9.x86_64                                                     4/5 
  验证    : protobuf-lite-3.14.0-16.el9.x86_64                                                   5/5 

已安装:
  mecab-0.996-3.el9.4.x86_64                         mysql-errmsg-8.0.41-2.el9.x86_64                
  mysql-selinux-1.0.14-1.el9.noarch                  mysql-server-8.0.41-2.el9.x86_64                
  protobuf-lite-3.14.0-16.el9.x86_64                

完毕!
[root@host1 tomcat-mysql]# systemctl start mysqld
[root@host1 tomcat-mysql]# systemctl enable mysqld
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
[root@host1 tomcat-mysql]# systemctl status mysqld
● mysqld.service - MySQL 8.0 database server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
     Active: active (running) since Mon 2025-09-22 10:36:21 CST; 8s ago
   Main PID: 606460 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 48528)
     Memory: 451.5M (peak: 466.5M)
        CPU: 11.033s
     CGroup: /system.slice/mysqld.service
             └─606460 /usr/libexec/mysqld --basedir=/usr

9月 22 10:36:08 host1 systemd[1]: Starting MySQL 8.0 database server...
9月 22 10:36:09 host1 mysql-prepare-db-dir[605114]: Initializing MySQL database
9月 22 10:36:21 host1 systemd[1]: Started MySQL 8.0 database server.
[root@host1 tomcat-mysql]# mysql -u root -p -e "USE example_db; SELECT * FROM user;"
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@host1 tomcat-mysql]# mysql -u root -p -e "USE example_db; SELECT * FROM user;"
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@host1 tomcat-mysql]# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.41 Source distribution

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> -e "USE example_db; SELECT * FROM user;"
    -> exit
    -> EXIT;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-e "USE example_db; SELECT * FROM user;"
exit
EXIT' at line 1
mysql> mysql -u root -e "USE example_db; SELECT * FROM user;"
    -> EXIT;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql -u root -e "USE example_db; SELECT * FROM user;"
EXIT' at line 1
mysql> EXIT;
Bye
[root@host1 tomcat-mysql]# cp -r tomcat/webapps/example-webapp /usr/local/tomcat/webapps/
cp: 无法创建目录 '/usr/local/tomcat/webapps/': 没有那个文件或目录
[root@host1 tomcat-mysql]# cp -r tomcat/webapps/example-webapp cd /root/projects/tomcat-mysql/webapps/
cp: 目标'/root/projects/tomcat-mysql/webapps/' 不是目录
[root@host1 tomcat-mysql]# docker exec -it tomcat-server ls /usr/local/tomcat/webapps/example-webapp
index.jsp  META-INF  test-datasource.jsp  test-jdbc.jsp  test-jndi.jspWEB-INF
[root@host1 tomcat-mysql]# docker compose restart
[+] Restarting 2/2
 ✔ Container tomcat-mysql-db  Started                                                           1.6s 
 ✔ Container tomcat-server    Started                                                           0.9s 
[root@host1 tomcat-mysql]# 

代码过程可能出现遗漏或者是重复,请多多体谅和修正!!!

相关推荐
sheji34162 小时前
【开题答辩全过程】以 springboot高校社团管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
吃不胖没烦恼2 小时前
Alibaba Cloud Linux 3 +Docker 部署 ThinkPHP6 (宝塔环境)-问题篇
运维·docker·容器
HAORChain2 小时前
Fabric 2.x 外部链码部署(External Chaincode Service)实战攻略
linux·docker·区块链·fabric
Lin_Aries_04212 小时前
部署 GitLab 服务器
linux·运维·服务器·docker·gitlab·github
zzywxc7872 小时前
大模型落地实践指南:从技术路径到企业级解决方案
java·人工智能·python·microsoft·golang·prompt
相与还3 小时前
IDEA+SpringBoot实现远程DEBUG到本机
java·spring boot·intellij-idea
小杨勇敢飞3 小时前
IDEA 2024 中创建 Maven 项目的详细步骤
java·ide·intellij-idea
appdeveloperxg3 小时前
Centos 7 创建ftp 匿名登录和专用用户名登录可上传下载
linux·服务器
野犬寒鸦3 小时前
从零起步学习Redis || 第四章:Cache Aside Pattern(旁路缓存模式)以及优化策略
java·数据库·redis·后端·spring·缓存