0

我有一个在 apache Tomcat 中运行的第 3 方 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"]
4

1 回答 1

0

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

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

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

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

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

我们确实运行了许多带有不同战争应用程序的 tomcat 容器,并且正如您所期望的那样,它们完全跨平台运行。

提示:为避免 a)始终使用映像 java env 构建映像。

于 2017-01-03T17:20:54.977 回答