Spring-agent: ошибка при открытии zip-файла или отсутствует манифест JAR

#java #ubuntu #docker

#java #ubuntu #docker

Вопрос:

Я пытаюсь запустить приложение с помощью Docker. Приложение — это Java-программа, работающая на Tomcat. Итак, я создаю изображение, и Dockerfile оно выглядит так:

 FROM tomcat:7.0.72-jre8

COPY Tomcat/ $CATALINA_HOME/

ENV JAVA_OPTS="$JAVA_OPTS -javaagent:$CATALINE_HOME/lib/spring-agent-2.5.6.jar -Xms2048m -Xmx2048m -Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true"
  

Как вы видите, я использую -javaagent option, но это вызывает:

 Error opening zip file or JAR manifest missing : /lib/spring-agent-2.5.6.jar
Error occurred during initialization of VM
agent library failed to init: instrument
  

Я пробовал то же самое, установив JAVA_OPTS in setenv.sh — то же исключение. Я уверен, что библиотека скопирована в контейнер и существует по указанному пути. Я проверил это, запустив тот же образ без javaagent опции, а затем получил к нему доступ в терминале. spring-agent был в папке lib, поэтому я немного застрял.

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

Есть предложения?

Ответ №1:

Правильным способом было бы позволить Docker создавать файл jar вместо передачи ранее созданного файла jar. Я сделал это следующим образом: https://github.com/glapp/mape/blob/master/Dockerfile

Это может быть полезно для вашего приложения Spring: https://spring.io/guides/gs/spring-boot-docker /

Комментарии:

1. как это может быть полезно при решении проблемы javaagent? Действительно, хотелось бы упомянуть, но я не думаю, что это решение.

2. Почему вы думаете, что проблема в javaagent? В сообщении об ошибке указано, что возникла проблема с открытием zip-файла или отсутствует файл манифеста. Вы уже убедились, что файл манифеста находится в вашем файле jar? Я подозреваю, что это настоящая причина.

Ответ №2:

Ну, проблема заключалась в $CATALINA_HOME том, что эта переменная была пропущена при javaagent вызове option, поэтому я нашел временное решение для указания пути like /usr/local/tomcat/ вместо $CATALINA_HOME .

Довольно неожиданно, как и на предыдущем шаге, я копирую файлы $CATALINA_HOME , и это работает.

Я бы все равно не стал проверять этот ответ как правильный, потому что он не выглядит хорошим решением. Любые идеи по-прежнему приветствуются.