LINUX.ORG.RU

Docker, запуск image с *.jar

 ,


0

2

Добрый день! Подскажите пожалуйста, как запустить *.jar внутри контейнера докера? Докерфайл такой:

  • FROM openjdk:8-jdk-alpine
  • ARG JAR_FILE
  • RUN mkdir -p /opt/auth
  • COPY «target/${JAR_FILE}» /opt/auth
  • WORKDIR /opt/auth
  • ENV jarFile=${JAR_FILE}
  • ENTRYPOINT [ «sh», «-c», «java $JAVA_OPTS -jar $jarFile» ]

При запуске docker run IMAGE java -jar po.jar ошибка Error: -jar requires jar file specification



Последнее исправление: Slavkavtanke (всего исправлений: 2)

У вас ENTRYPOINT в виде exec form, при этом shell не создаётся и, соответственно, переменные окружения не работают. Вам нужно использовать shell form, что-то типа ENTRYPOINT /path/java/ $JAVA_OPTS -jar $jarFile.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Пытался так запустить (и с указанием пути с перем. JAVA_HOME): docker run image:latest –entrypoint java -jar file.jar Ошибка та же.

Может быть проблема с самой явой в image:latest?

Команда docker image inspect image:latest говорит вот что: «JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk», «JAVA_VERSION=8u212», «JAVA_ALPINE_VERSION=8.212.04-r0»

Сам file.jar запускается нормально с консоли centos,т.е. проблема не в этом. Структура каталогов в слое в image:latest: LAYER_ID/layer/opt/auth/file.jar

Slavkavtanke
() автор топика

Выглядит так, словно $jarFile - пустая. Попробуй без параметров, а захардкодить Dockerfile

При запуске docker run IMAGE java -jar po.jar

А po.jar само собой лежит в WORKDIR?

Dred ★★★★★
()
Последнее исправление: Dred (всего исправлений: 1)
Ответ на: комментарий от Dred

Да,я проверил так, выгрузил image и распаковал (может еще как то можно проверить,не знаю): docker save image:latest > image.tar

Внутри это: LAYER_ID/layer/opt/auth/po.jar
/po.jar.original /file.jar

Т.е. вроде все нормально,но не работает :(

Slavkavtanke
() автор топика
Ответ на: комментарий от Slavkavtanke

и да, inspect говорит что, т.е. все в норме опять же «WorkingDir»: «/opt/auth»,

Slavkavtanke
() автор топика
Ответ на: комментарий от Slavkavtanke

я бы разбил проблему на две части:

  1. Вставить везде абсолютные пути и проверить, что всё работает.

  2. Заставить работать переменную окружения.

ugoday ★★★★★
()
Ответ на: комментарий от Slavkavtanke

Должно работать. У меня

FROM openjdk:8-jdk-alpine
ARG JAR_FILE
ENV jarFile=${JAR_FILE}
ENTRYPOINT echo jarfile=$jarFile

Собираю

docker build -t test --build-arg JAR_FILE=blah .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM openjdk:8-jdk-alpine
 ---> a3562aa0b991
Step 2/4 : ARG JAR_FILE
 ---> Using cache
 ---> 32aac0a8150a
Step 3/4 : ENV jarFile=${JAR_FILE}
 ---> Running in bf42b8644b13
Removing intermediate container bf42b8644b13
 ---> 6e5dcd5e7c8d
Step 4/4 : ENTRYPOINT echo jarfile=$jarFile
 ---> Running in bd3fb2ce34cf
Removing intermediate container bd3fb2ce34cf
 ---> 95d34cea86e3
Successfully built 95d34cea86e3
Successfully tagged test:latest

Запускаю

 $ docker run test 
jarfile=blah
ugoday ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.