docker – 如何在我的spring-boot应用程序启动之前等待数据库容器启动

我有一个
spring-boot应用程序与couchbase谈话.我将spring应用程序构建为docker镜像.为了让应用程序运行,需要在couchbase设置中满足一些前提条件.当我首先运行我的couchbase映像然后运行我的spring-boot应用程序映像时,一切运行正常.但是,我需要将其自动化并从docker-compose文件运行,这意味着通过单个docker-compose up命令我应该能够首先运行couchbase映像,使用所有预置配置它然后开始运行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中来实现它.不是最好的解决方案,因为我觉得等待代码不应该是容器本身的一部分.此外,我需要找到一种方法来等待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
点赞