仅在特定计算机上接收docker容器上的运行时错误

时间:2017-01-03 16:18:54

标签: java tomcat docker tomcat8 docker-for-mac

我有一个在apache Tomcat中运行的第三方java webapp。我们正在使用docker来运行此应用程序。在我的机器上运行时,我们收到错误

我想强调一点,我们不构建这个.war。我们不拥有此.war。我们只是试图启动一个运行这个已经构建的代码的docker容器。

javax.servlet.ServletException: Servlet execution threw an exception org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

详细信息

java.lang.IncompatibleClassChangeError: Class javax.ws.rs.core.Response$Status does not implement the requested interface javax.ws.rs.core.Response$StatusType

在网上对此进行了一些调查,结果显示很多人在使用冲突的球衣罐时遇到问题。我们不应该有这个问题,因为我们使用docker for mac ...而这适用于跨多个版本的docker的其他人的机器。

我已经多次擦除并重新安装了docker,在每次重启之间重启我的机器。我使用的是与它工作的机器相同的版本。

我在OSX Sierra 10.12.2

泊坞窗图片基于tomcat:8.5.9-jre8-alpine 它会将相关的.war复制到$CATALINA_HOME/webapps/,将一个log4j .jar复制到$CATALINA_HOME/lib/以及两个.properties文件。'

这台特定的机器上有什么东西可以干扰容器吗?

Dockerfile如下

FROM tomcat:8.5.9-jre8-alpine@sha256:780c0fc47cf5e212bfa79a379395444a36bbd67f0f3cd9d649b90a74a1a7be20

ENV JAVA_OPTS="-Xms2048m -Xmx2048m"

WORKDIR $CATALINA_HOME

COPY ./target/lib/* $CATALINA_HOME/lib/
COPY ./target/<appname>.war $CATALINA_HOME/webapps/

EXPOSE 8080
CMD ["catalina.sh", "run"]

1 个答案:

答案 0 :(得分:0)

检查所有卷,在这种情况下最关键的卷是从〜/ .m2安装到容器〜/ .m2 ..这可以解释你的问题。

除此之外,只要您使用相同的图像AND,它就无法在一台机器上工作,而在另一台机器上工作则没有意义:

a)WAR文件的编译不会发生在probelematic计算机上(很可能是本地maven / m2)问题

b)你没有在入口点做任何疯狂的事情真的伤害了范式(我不这么认为)

c)您将本地m2安装到容器m2中,从而共享库

我们运行了很多带有不同战争应用程序的tomcat容器,正如您所期望的那样,它们绝对可以跨平台运行。

提示:要避免a)使用图像java env 始终在图像中构建