【问题标题】:Tomcat started but application war file not deployed with the docker composer fileTomcat 已启动,但应用程序 war 文件未与 docker composer 文件一起部署
【发布时间】:2021-07-04 22:21:17
【问题描述】:

我使用一个 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

我尝试了一些东西,但没有任何成功。 我错过了什么吗?

谢谢,

阿图尔

【问题讨论】:

  • 你能分享 dockerfile 来创建 tomcat 镜像吗?或者您正在 dockerhub 上使用该图像
  • 我正在使用来自 dockerhub 的图像。
  • 你在哪里告诉 Tomcat 监听 8081?如果您正在谈论撰写文件8081:8080 中的行,那只是端口映射。 8081 将是主机上使用的端口,而不是容器。
  • 哦,是的……我的错。对不起,@snahor。感谢您的澄清。不知道我是怎么错过的。
  • 对不起,我无法帮助你,我的tomcat知识非常有限(几乎没有)。但根据您的输出,war 文件已加载。我相信你不需要改变任何东西。

标签: spring-boot docker docker-compose war tomcat9


【解决方案1】:

我能够解决这个问题。解决方案是创建一个单独的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"]

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

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

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

创建一个泊坞窗文件。 (例如- 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 运行它,它就会启动并按预期工作。

【讨论】:

    猜你喜欢
    • 2022-06-24
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多