我有两个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"
任何帮助将不胜感激。谢谢。
答案 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秒钟。