【问题标题】:Embedded config file in fat jar isn't recognised while running under docker在 docker 下运行时无法识别 fat jar 中的嵌入式配置文件
【发布时间】:2018-02-12 15:01:35
【问题描述】:

我们有一个暴露了axis JAX-RPC 服务的spring-boot 应用程序(旧系统需要在新世界中支持它一段时间)。当作为笔记本电脑上的独立应用程序运行时,胖 jar 构建按预期工作。如果我将 jar 嵌入到 docker 映像中,我会在运行时收到以下错误:

2018-02-12 14:34:46.011 ERROR [api-jva-pricing-,,,] 7 --- [nio-9510-exec-1] .a.a.c.EngineConfigurationFactoryServlet : Problem with servlet engine /WEB-INF directory
org.apache.axis.ConfigurationException: Configuration file directory '/tmp/tomcat-docbase.682267175490034491.9510/WEB-INF' does not exist or is not a directory or is not readable.
    at org.apache.axis.configuration.FileProvider.<init>(FileProvider.java:99) ~[axis-1.4.jar!/:na]
    at org.apache.axis.configuration.EngineConfigurationFactoryServlet.getServerEngineConfig(EngineConfigurationFactoryServlet.java:174) [axis-1.4.jar!/:na]
    at org.apache.axis.configuration.EngineConfigurationFactoryServlet.getServerEngineConfig(EngineConfigurationFactoryServlet.java:99) [axis-1.4.jar!/:na]
    at org.apache.axis.transport.http.AxisServletBase.getEngineEnvironment(AxisServletBase.java:273) [axis-1.4.jar!/:na]
    at org.apache.axis.transport.http.AxisServletBase.getEngine(AxisServletBase.java:172) [axis-1.4.jar!/:na]
    at org.apache.axis.transport.http.AxisServletBase.getOption(AxisServletBase.java:396) [axis-1.4.jar!/:na]
    at org.apache.axis.transport.http.AxisServletBase.init(AxisServletBase.java:112) [axis-1.4.jar!/:na]
    at org.apache.axis.transport.http.AxisServlet.init(AxisServlet.java:156) [axis-1.4.jar!/:na]
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:795) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1434) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_151]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_151]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.11.jar!/:8.5.11]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]

文件,轴正在努力寻找位于/WEB-INF/server-config.wsdd 的胖罐子中。只有在 docker 容器中运行时才会出现上述问题。有人遇到过这样的问题吗?

【问题讨论】:

    标签: docker spring-boot axis


    【解决方案1】:

    如果有人遇到这种情况,这是对我有用的解决方案。如前所述,我仅在从 docker 容器运行 fat jar 时才看到此问题。当使用与 docker 容器相同的命令的 fat jar 在笔记本电脑上本地运行时,我没有看到问题。一种解决方案是分解 jar 并使用与您的目标相关的 Spring Boot Launcher 类之一启动 docker 入口点。有关详细信息,请参见此处 - https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html 部分已分解档案。

    【讨论】:

    • 如果在 docker 中运行 fat-jar 存在任何资源限制,请向 docker 专家或 spring-boot 专家了解会很有趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多