在我的spring-boot应用程序启动之前,如何等待db容器启动

我有一个春季启动应用程序,它与couchbase进行对话。 我构build了一个Docker镜像的应用程序。 有一些先决条件,需要履行的couchbase设置为了运行的应用程序。 当我首先运行我的couchbase映像,然后运行我的spring-boot应用程序映像时,一切运行良好。 不过,我需要这个自动化,并从一个docker-compose文件运行,这意味着通过一个docker-compose up命令,我应该能够先运行couchbase映像,configuration所有预置,然后开始运行spring-boot应用程序。 我遇到了很多讨论的话题,但不幸的是我无法以某种方式工作。 我尝试使用CMD和入口点,但没有成功。 这是我的docker-compose文件

version: "2" services: expensetracker-cb: image: chakrar27/expensetracker-cb command: sh test_hello.sh ports: - 8080:8080 depends_on: - mycouchbase mycouchbase: image: chakrar27/couchbase_new_10_08_2016 ports: - 8091:8091 - 8092:8092 - 8093:8093 - 8094:8094 - 11210:11210 

实际上它根本不触发test_hello.sh。 这是spring-boot expensetracker应用程序的dockerfile

 FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD expensetracker-cb-0.1.0.jar app.jar RUN sh -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 

有人可以帮忙吗?

好吧…我可以通过将脚本包含在应用程序容器的Dockerfile中来实现它。 不是最好的解决scheme,因为我觉得等待代码不应该是容器本身的一部分。 此外,我需要find一种方法来等待couchbase集群启动并运行样本桶,并将其包含在脚本或couchbase容器本身中。 现在虽然这个解决方法适用于我。 这是dockerfile的内容

 FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD expensetracker-cb-0.1.0.jar app.jar RUN sh -c 'touch /app.jar' ADD test_hello.sh . RUN chmod +x test_hello.sh CMD sh test_hello.sh 

是。

首先在docker-compose.yml中使用入口点而不是命令。 由于你的入口点调用java。

其次在容器中包含你的脚本:

 version: "2" services: expensetracker-cb: image: chakrar27/expensetracker-cb entrypoint: sh /mnt/test_hello.sh ports: - 8080:8080 depends_on: - mycouchbase volumes: - ./test_hello.sh:/mnt/test_hello.sh mycouchbase: image: chakrar27/couchbase_new_10_08_2016 ports: - 8091:8091 - 8092:8092 - 8093:8093 - 8094:8094 - 11210:11210 

示例test_hello.sh

 #! /bin/bash echo "Put your waiting code here, I will wait for 1 min" sleep 60 java -Djava.security.egd=file:/dev/./urandom -jar /app.jar 

我和Oracle有同样的问题,我最后的手段是试图执行一个SQL,直到成功。 我认为,沙发基地,你可以做类似的事情。