Tomcat 已启动,但应用程序 war 文件未与 docker Composer 文件一起部署

问题描述 投票:0回答:2

我使用 tomcat-9 的镜像来采用 openjdk。 docker-compose 文件配置是:

tomcat-server:
    image: tomcat:9.0.45-jdk11-adoptopenjdk-hotspot
    ports: 
      - "8081:8080"
    volumes:
      - /webapp/target/app.war:/usr/local/tomcat/webapps/app.war
    environment:
      - EUREKA.CLIENT.SERVICEURL.DEFAULTZONE=http://naming-server:8761/eureka
      - SPRING.REDIS.HOST=redis-cache-server

当我使用 docker-compse 文件启动 tomcat 时,日志显示它不会以提到的 8081 端口启动。它仍然在 8080 上启动。有关详细信息,请参阅日志。

tomcat-server_1       | NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=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-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.45
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Server built:          Mar 30 2021 10:29:04 UTC
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.45.0
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.4.72-microsoft-standard-WSL2
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.10+9
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            AdoptOpenJDK
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
tomcat-server_1       | org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
tomcat-server_1       | org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.27] using APR version [1.6.5].
tomcat-server_1       | org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
tomcat-server_1       | org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
tomcat-server_1       | org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1f  31 Mar 2020]
tomcat-server_1       | org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
tomcat-server_1       | org.apache.catalina.startup.Catalina.load Server initialization in [745] milliseconds
tomcat-server_1       | org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
tomcat-server_1       | org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.45]
tomcat-server_1       | org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/app.war]
tomcat-server_1       | org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/app.war] has finished in [361] ms
tomcat-server_1       | org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
tomcat-server_1       | org.apache.catalina.startup.Catalina.start Server startup in [463] milliseconds

我尝试了一些事情,但没有取得任何成功。 我是不是错过了什么?

谢谢,

阿图尔

spring-boot docker docker-compose war tomcat9
2个回答
0
投票

我能够解决这个问题。解决方案是创建一个单独的 docker 文件来创建 tomcat 映像并在 docker Composer 文件中使用它。

问题是,即使将war复制到tomcat的webapps文件夹中,它也不会部署。请参阅日志以供参考:

tomcat-server_1       | org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/app.war]
tomcat-server_1       | org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/app.war] has finished in [361] ms
tomcat-server_1       | org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]

由于镜像 tomcat:9.0.45-jdk11-adoptopenjdk-hotspot 包含命令 ['catalina.sh', 'run'],只要执行 docker-compose 命令,tomcat 就会启动并结束在启动过程中,它将 war 文件复制到 tomcat 位置。所以它不会部署 war 文件。

这就是我发现的原因。 (如果我错了或者我错过了什么,请清除我)。

所以最终的解决方案是这样的(对我有用):

创建一个 docker 文件。 (例如- Dockerfile_web)

#Take the Tomcat-9 image which supports AdoptOpenJDK
FROM tomcat:9.0.45-jdk11-adoptopenjdk-hotspot

#Copy the WAR file to tomcat
ADD ./webapp/target/attest.war /usr/local/tomcat/webapps/attest.war

#Allow execution (Not required, just added)
CMD chmod +x /usr/local/tomcat/bin/catalina.sh

接下来是在 docker-compose 文件中添加此文件引用。

web-app:
    build:
      context: .
      dockerfile: Dockerfile_Web
    ports: 
      - "8081:8080"
    networks:
      - app-network
    command: ['catalina.sh', 'run']
    environment:
      - EUREKA.CLIENT.SERVICEURL.DEFAULTZONE=http://naming-server:8761/eureka
      - SPRING.REDIS.HOST=redis-cache-server

一旦我使用 docker-compose up 运行它,它就会启动并按预期工作。


0
投票

我遇到了同样的问题,war 文件正在提取但未部署。更改 tomcat 的 docker 映像对我有用。

之前我使用的是 tomcat:9.0.80-jdk17-corretto-al2 ,将其更改为 tomcat:latest 后,它开始完美工作。

© www.soinside.com 2019 - 2024. All rights reserved.