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



我使用tomcat-9的图像来采用openjdk。docker组合文件配置为:

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

我尝试了几件事,但都没有成功。我是不是错过了什么?

谢谢,

Atul

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

问题是,即使战争被复制到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"]

由于imagetomcat:9.045-jdk11-adoptopenjdk-hotspot包含命令['catalina.sh','run'],一旦执行docker compose命令,tomcat就会启动,并在启动过程结束时将war文件复制到tomcat位置。所以它不会部署战争文件。

这就是我发现的原因。(如果我错了或者我遗漏了什么,请澄清我(。

所以最终的解决方案是这样的(对我来说有效(:

创建一个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运行了这个,它就开始了,并以expexcted的方式工作。

相关内容

最新更新