Запускать несколько файлов Jar последовательно (не одновременно) по команде «docker run imagename» - PullRequest
0 голосов
/ 23 октября 2018

У меня есть два файла jar (a.jar и b.jar).b.jar зависит от a.jar.b.jar может работать только после того, как a.jar запущен и работает.Я хочу запустить их с помощью одной команды запуска Docker.Мой файл Docker выглядит следующим образом:

# base image is java:8 (ubuntu)
FROM java:8

# add files to image 
ADD a.jar .
ADD b.jar .
ADD start.sh .

# start on run
CMD ["bash", "start.sh"]

start.sh выглядит так:

/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar docker-spring-boot.jar &
/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar docker-spring-boot-secondary.jar

Когда я запускаю образ Docker, обе банки работают одновременно.

Когдамой start.sh выглядит следующим образом:

/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar docker-spring-boot.jar;
/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar docker-spring-boot-secondary.jar;

Тогда работает только a.jar.

Я воспользовался этим Как автоматически запустить два JAR-файла на "докере"запустить контейнер "

Любая помощь будет оценена.спасибо.

1 Ответ

0 голосов
/ 23 октября 2018

Вам необходимо написать скрипт, который проверяет, «a.jar запущен и работает», и вставить его перед вторым вызовом jar следующим образом:

java -jar a.jar &
wait_till_a_jar_is_up_and_running && 
java -jar b.jar

Примечание: важно, чтобы второйраз вы используете &&, но не &.

Никто из нас не знает, что такое "a.jar" и работает, поскольку мы не знаем, что делает a.jar.Вам нужно будет реализовать его самостоятельно (скорее всего, вам поможет wait-for-it.sh.)

В целях тестирования вы можете попробовать использовать команду sleep:

java -jar a.jar & sleep 10 && java -jar b.jar

Где sleep 10 просто ждет 10 секунд, прежде чем запустить вторую банку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...