From ad398e45ffe60b4d797ffdf4e85a933deb46db4f Mon Sep 17 00:00:00 2001
From: Maciej Szarlinski <mszarlinski@gmail.com>
Date: Fri, 30 Dec 2016 17:01:48 +0100
Subject: [PATCH] Containers startup coordination with wait-for-it.sh

---
 README.md                                           |  3 ++-
 docker-compose.yml                                  | 13 +++++++++++++
 .../src/main/docker/Dockerfile                      |  2 ++
 .../src/main/docker/Dockerfile                      |  2 ++
 .../src/main/docker/Dockerfile                      |  2 ++
 .../src/main/docker/Dockerfile                      |  4 +++-
 .../src/main/docker/Dockerfile                      |  2 ++
 .../src/main/docker/Dockerfile                      |  2 ++
 8 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index f5afa675..f57b23c7 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,8 @@ You can tell Config Server to use your local Git repository by using `local` Spr
 ## Starting services locally with docker-compose
 In order to start entire infrastructure using Docker, you have to build images by executing `mvn clean install -PbuildDocker` 
 from a project root. Once images are ready, you can start them with a single command
-`docker-compose up`. After starting services it takes a while for API Gateway to be in sync with service registry,
+`docker-compose up`. Containers startup order is coordinated with [`wait-for-it.sh` script](https://github.com/vishnubob/wait-for-it). 
+After starting services it takes a while for API Gateway to be in sync with service registry,
 so don't be scared of initial Zuul timeouts. You can track services availability using Eureka dashboard
 available by default at http://localhost:8761.
 
diff --git a/docker-compose.yml b/docker-compose.yml
index 2e9f5da6..b614419c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -2,53 +2,63 @@ version: '2'
 services:
   config-server:
     image: mszarlinski/spring-petclinic-config-server
+    container_name: config-server
     ports:
      - 8888:8888
 
   discovery-server:
     image: mszarlinski/spring-petclinic-discovery-server
+    container_name: discovery-server
     links:
      - config-server
     depends_on:
       - config-server
+    entrypoint: ["./wait-for-it.sh","config-server:8888/info","--","java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
     ports:
      - 8761:8761
 
   customers-service:
     image: mszarlinski/spring-petclinic-customers-service
+    container_name: customers-service
     links:
      - config-server
      - discovery-server
     depends_on:
      - config-server
      - discovery-server
+    entrypoint: ["./wait-for-it.sh","discovery-server:8761/manage/health","--","java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
     ports:
     - 8081:8081
 
   visits-service:
     image: mszarlinski/spring-petclinic-visits-service
+    container_name: visits-service
     links:
      - config-server
      - discovery-server
     depends_on:
      - config-server
      - discovery-server
+    entrypoint: ["./wait-for-it.sh","discovery-server:8761/manage/health","--","java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
     ports:
      - 8082:8082
 
   vets-service:
     image: mszarlinski/spring-petclinic-vets-service
+    container_name: vets-service
     links:
      - config-server
      - discovery-server
     depends_on:
      - config-server
      - discovery-server
+    entrypoint: ["./wait-for-it.sh","discovery-server:8761/manage/health","--","java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
     ports:
      - 8083:8083
 
   api-gateway:
     image: mszarlinski/spring-petclinic-api-gateway
+    container_name: api-gateway
     links:
      - config-server
      - discovery-server
@@ -58,16 +68,19 @@ services:
     depends_on:
      - config-server
      - discovery-server
+    entrypoint: ["./wait-for-it.sh","discovery-server:8761/manage/health","--","java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
     ports:
      - 8080:8080
 
   tracing-server:
     image: mszarlinski/spring-petclinic-tracing-server
+    container_name: tracing-server
     links:
      - config-server
      - discovery-server
     depends_on:
      - config-server
      - discovery-server
+    entrypoint: ["./wait-for-it.sh","discovery-server:8761/manage/health","--","java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
     ports:
      - 9411:9411
diff --git a/spring-petclinic-api-gateway/src/main/docker/Dockerfile b/spring-petclinic-api-gateway/src/main/docker/Dockerfile
index 1e887124..b2261d22 100644
--- a/spring-petclinic-api-gateway/src/main/docker/Dockerfile
+++ b/spring-petclinic-api-gateway/src/main/docker/Dockerfile
@@ -1,5 +1,7 @@
 FROM java:8
 VOLUME /tmp
+ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh wait-for-it.sh
+RUN bash -c 'chmod +x wait-for-it.sh'
 ADD petclinic.jar /app.jar
 ENV SPRING_PROFILES_ACTIVE docker
 RUN bash -c 'touch /app.jar'
diff --git a/spring-petclinic-customers-service/src/main/docker/Dockerfile b/spring-petclinic-customers-service/src/main/docker/Dockerfile
index 2a03442a..fc0b6ba7 100644
--- a/spring-petclinic-customers-service/src/main/docker/Dockerfile
+++ b/spring-petclinic-customers-service/src/main/docker/Dockerfile
@@ -1,5 +1,7 @@
 FROM java:8
 VOLUME /tmp
+ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh wait-for-it.sh
+RUN bash -c 'chmod +x wait-for-it.sh'
 ADD spring-petclinic-customers-service-1.4.2.jar /app.jar
 ENV SPRING_PROFILES_ACTIVE docker
 RUN bash -c 'touch /app.jar'
diff --git a/spring-petclinic-discovery-server/src/main/docker/Dockerfile b/spring-petclinic-discovery-server/src/main/docker/Dockerfile
index 23ce4133..069731ad 100644
--- a/spring-petclinic-discovery-server/src/main/docker/Dockerfile
+++ b/spring-petclinic-discovery-server/src/main/docker/Dockerfile
@@ -1,5 +1,7 @@
 FROM java:8
 VOLUME /tmp
+ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh wait-for-it.sh
+RUN bash -c 'chmod +x wait-for-it.sh'
 ADD spring-petclinic-discovery-server-1.4.2.jar /app.jar
 ENV SPRING_PROFILES_ACTIVE docker
 RUN bash -c 'touch /app.jar'
diff --git a/spring-petclinic-tracing-server/src/main/docker/Dockerfile b/spring-petclinic-tracing-server/src/main/docker/Dockerfile
index 768fc8d9..1820883c 100644
--- a/spring-petclinic-tracing-server/src/main/docker/Dockerfile
+++ b/spring-petclinic-tracing-server/src/main/docker/Dockerfile
@@ -1,6 +1,8 @@
 FROM java:8
 VOLUME /tmp
-ADD spring-petclinic-tracing-server-1.4.2.jar /app.jar
+ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh wait-for-it.sh
+RUN bash -c 'chmod +x wait-for-it.sh'
+RUN bash -c 'chmod +x wait-for-it.sh'
 ENV SPRING_PROFILES_ACTIVE docker
 RUN bash -c 'touch /app.jar'
 EXPOSE 8081
diff --git a/spring-petclinic-vets-service/src/main/docker/Dockerfile b/spring-petclinic-vets-service/src/main/docker/Dockerfile
index 2126b6b0..6fb4095c 100644
--- a/spring-petclinic-vets-service/src/main/docker/Dockerfile
+++ b/spring-petclinic-vets-service/src/main/docker/Dockerfile
@@ -1,5 +1,7 @@
 FROM java:8
 VOLUME /tmp
+ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh wait-for-it.sh
+RUN bash -c 'chmod +x wait-for-it.sh'
 ADD spring-petclinic-vets-service-1.4.2.jar /app.jar
 ENV SPRING_PROFILES_ACTIVE docker
 RUN bash -c 'touch /app.jar'
diff --git a/spring-petclinic-visits-service/src/main/docker/Dockerfile b/spring-petclinic-visits-service/src/main/docker/Dockerfile
index 9dd6fb0a..58cadb73 100644
--- a/spring-petclinic-visits-service/src/main/docker/Dockerfile
+++ b/spring-petclinic-visits-service/src/main/docker/Dockerfile
@@ -1,5 +1,7 @@
 FROM java:8
 VOLUME /tmp
+ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh wait-for-it.sh
+RUN bash -c 'chmod +x wait-for-it.sh'
 ADD spring-petclinic-visits-service-1.4.2.jar /app.jar
 ENV SPRING_PROFILES_ACTIVE docker
 RUN bash -c 'touch /app.jar'
-- 
GitLab