Tomcat 部署 WAR 文件,但应用程序无法在 docker 容器中启动



我有一个带有注释的Spring框架MVC应用程序,它包含了所有的依赖项。当tomcat/docker容器启动时,它成功地部署和打包了WAR文件,但应用程序没有启动。Catalina日志有成功启动和部署行:

tomcat_1  | 29-Apr-2022 07:42:55.848 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/ROOT.war]
tomcat_1  | 29-Apr-2022 07:42:57.892 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.
tomcat_1  | 29-Apr-2022 07:42:57.948 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/ROOT.war] has finished in [2,099] ms

应用程序没有打包web.xml,因为它使用注释。

应用程序在eclipse IDE和docker之外的干净tomcat安装中正常启动。

你知道吗?

这是我的DokerFiler

version: '3.9'
services:
tomcat:
#    image: xxxxxxxxxxx
image: tomcat:8-jre8-openjdk
depends_on:
- db
ports:
- '8082:8080'
environment:
DATABASE_URL: jdbc:mysql:/xxxxx
MYSQL_USER: xxxx
MYSQL_PASSWORD: xxxx
MYSQL_DATABASE: xxxx
volumes:
- ./zzz:/usr/local/tomcat/webapps/
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: xxx
MYSQL_USER: xxxx
MYSQL_PASSWORD: xxxx
MYSQL_DATABASE: xxxx
volumes:
- .data:/var/lib/mysql
ports:
- "3309:3306"

我已经与这个问题斗争了好几天,并得出结论,这可能是Java版本与Docker映像中的Tomcat版本不兼容的副作用(在我的情况下,我没有设法在容器中运行独立Tomcat v10的<java.version>18</java.version>)。所以我只是试着找到可以工作的版本的确切组合,这个解决了这个奇怪的问题:

  1. 我将tomcat容器的镜像版本降级为tomcat:9.0.64-jre8
  2. pom.xml文件中明确指定<java.version>1.8</java.version>

如果您使用Tomcat v.10,请记住A)(不是你的情况,但无论如何,一个常见的问题来源)你必须将你的war文件定位到webapps-javaee文件夹而不是webapps-这是Tomcat v10引入的一个突破性的变化B)许多其他教程建议只使用Spring Boot自带的嵌入式Tomcat,它们不会扩展到独立的Tomcat

最新更新