Подтвердить что ты не робот

Запустить файл jar в изображении докера

Я создал изображение Docker с помощью Java и копирую файл JAR в изображение. Мой Dockerfile:

FROM anapsix/alpine-java
MAINTAINER myNAME 
COPY testprj-1.0-SNAPSHOT.jar /home/testprj-1.0-SNAPSHOT.jar
RUN java -jar /home/testprj-1.0-SNAPSHOT.j

После выполнения следующей команды:

docker build -t imageName.

В консоли вижу вывод из приложения и все нормально. Но когда я останавливаю образ, я не знаю, как снова запустить образ? Когда я выполняю следующую команду:

docker run -i -t imageName java -jar /home/testprj-1.0-SNAPSHOT.jar

Приложение запускается снова, но в моем Dockerfile я уже написал эту команду. Как я могу запустить образ без этой команды и запустить приложение автоматически?

4b9b3361

Ответ 1

Существует разница между изображениями и контейнерами.

  • Изображения будут построены ONCE
  • Вы можете запускать контейнеры из изображений

В вашем случае:

Измените свое изображение:

FROM anapsix/alpine-java
MAINTAINER myNAME 
COPY testprj-1.0-SNAPSHOT.jar /home/testprj-1.0-SNAPSHOT.jar
CMD ["java","-jar","/home/testprj-1.0-SNAPSHOT.jar"]

Создайте свое изображение:

docker build -t imageName .

Теперь запустите свою программу внутри контейнера:

docker run --name myProgram imageName

Теперь перезагрузите программу, перезагрузив контейнер:

docker restart myProgram

Ваша программа изменилась? Восстановите изображение!:

docker rmi imageName
docker build -t imageName .

Ответ 2

Возможно, это не совсем то, что вы просили, но если вам просто нужно запустить JAR (а не просто быть частью большего пользовательского контейнера), мне нравится такой подход - сопоставление тома/папки с JAR и запуск его с использованием стандартное исходное изображение:

docker run --rm -it -v /home/me/folderHoldingJar:/home:Z java:latest /bin/bash -c '/usr/bin/java -jar /home/theJarFile.jar'

Есть даже некоторые дополнительные аргументы, которые можно добавить, если JAR должен отображать графический интерфейс.