2017-01-03 1 views
0

У меня есть сторонний java webapp, который работает в Apache Tomcat. Мы используем докер для запуска этого приложения. При запуске на моей машине мы получаем ошибкуполучение ошибки времени выполнения на контейнере докера только для конкретной машины

Я хочу подчеркнуть, что мы не строим это .war. Мы не являемся владельцем этого .war. Мы просто пытаемся развернуть контейнер докера, который запускает этот уже построенный код.

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 для mac ... и это работает на всех остальных машинах через несколько версий докеров.

Я уничтожил и переустановил докер несколько раз, перезапустив свою машину между каждым перезапуском. Я использовал ту же версию, что и машины, где она работает.

Я на OSX Sierra 10.12.2

докер изображение основано на tomcat:8.5.9-jre8-alpine Он копирует соответствующие .war к $CATALINA_HOME/webapps/ и один log4j .jar к $CATALINA_HOME/lib/ вместе с двумя .properties файлами.

есть ли что-либо на этой конкретной машине, которая могла бы мешать контейнеру?

Dockerfile выглядит следующим образом

FROM tomcat:[email protected]: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"] 
+0

Используете ли вы ту же самую двоякую войну, которая разделяется общей репо, например, nexus? Если вы перестраиваете его в каждой среде, тогда проблема заключается в вашей системе сборки для войны, а не в докерах или tomcat. –

+0

мы совершили.war to git и на этапе сборки контейнера просто скопируйте его в каталог webapps – misterManager

+0

Пожалуйста, покажите нам свой файл Dockerfile (соответственно отредактированный, конечно) –

ответ

0

Проверьте все тома, наиболее важные из них в этом случае являются монтирует от вашего ~/.m2 в контейнер ~/.m2 .. это было бы объяснить вашу проблему.

Другое то, что это не имеет смысла, что он работает на одной машине, а не другой, до тех пор, пока вы используете один и тот же образ, а также:

а) компиляция файла WAR не происходят на probelematic компьютере (наиболее вероятно, местный Maven/м2) вопрос то

б) Вы не делать каких-либо сумасшедшие вещи в EntryPoint действительно вредит парадигму (я не делаю не так думаю)

с) Вы монтируйте свой местный м2 в контейнеры m2 и, таким образом, обменивайтесь библиотеками

Мы запускаем много контейнеров tomcat с различными военными приложениями, и они, как вы ожидаете, запускаете абсолютно кросс-платформу.

Подсказка: во избежание а) всегда встроить изображение с помощью изображения java env.

+0

Если это стандартная война, тогда контейнер времени выполнения не должен иметь ни maven, ни .m2, а там не должно быть внешних зависимостей, кроме стандартных условий, таких как логгер (и даже это толчок). –

+0

Это зависит от того, как вставляется военный файл, очевидно, сколько libs используется из реального контейнера tomcat, например mysql-connector и вещей, в то время как файл войны может быть скомпилирован против другого интерфейса 'java.lang.IncompatibleClassChangeError: Класс javax.ws.rs.core.Response $ Состояние не реализует запрошенный интерфейс javax.ws.rs.core.Response $ StatusType' - эта ошибка * точно * то, что вы получаете с неправильной версией времени выполнения-зависимости войны файл –

+0

maven и .m2 битов моего комментария не зависят от того, как файл войны в комплекте. Что касается зависимых от контейнера зависимостей - проблема несоответствия зависимости заключается в том, что это плохая практика, зависящая от среды, предоставляемой libs. См. 12FA (https://12factor.net/) –

Смежные вопросы