在“ docker run imagename”命令上顺序(不同时)运行多个Jar文件

时间:2018-10-23 08:39:17

标签: java shell docker ubuntu jar

我有两个jar文件(a.jar和b.jar)。 b.jar依赖于a.jar。 b.jar仅在a.jar启动并运行后才能运行。我想通过单个docker run命令运行它们。我的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 image时,两个jar同时运行。

当我的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正在运行。

我帮了这个How to have two JARs start automatically on "docker run container"

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

您需要编写一个脚本来检查“ 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 will help you)。

出于测试目的,您可以尝试使用sleep命令:

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

sleep 10仅在运行第二个jar之前等待10秒钟。