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