From e3496f57d7fb2ee98dcc3026851b26ac47cc9da2 Mon Sep 17 00:00:00 2001
From: Ludovic Claude <ludovic.claude54@gmail.com>
Date: Fri, 26 Aug 2016 18:50:26 +0200
Subject: [PATCH] Docker container: Wait for database

---
 Dockerfile              | 19 ++++++++++++-------
 docker/runner/README.md |  1 +
 docker/runner/run.sh    |  7 +++++++
 3 files changed, 20 insertions(+), 7 deletions(-)
 create mode 100755 docker/runner/run.sh

diff --git a/Dockerfile b/Dockerfile
index 152860d03..b0d399603 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,14 +2,19 @@ FROM java:openjdk-8u92-jdk-alpine
 
 MAINTAINER mirco.nasuti@chuv.ch
 
-RUN apk add --update ca-certificates wget &&  rm -rf /var/cache/apk/* /tmp/* && update-ca-certificates
-RUN wget https://github.com/jwilder/dockerize/releases/download/v0.2.0/dockerize-linux-amd64-v0.2.0.tar.gz
-RUN tar -C /usr/local/bin -xvzf dockerize-linux-amd64-v0.2.0.tar.gz
+ENV DOCKERIZE_VERSION=v0.2.0
 
-COPY ./docker/runner/config/application.tmpl /config/application.tmpl
-COPY ./docker/runner/README.md /
-COPY ./target/portal-backend-DOCKER_BUILD.jar backend.jar
+RUN apk add --update ca-certificates wget \
+    && rm -rf /var/cache/apk/* /tmp/* \
+    && update-ca-certificates \
+    && wget -O /tmp/dockerize.tar.gz https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-${DOCKERIZE_VERSION}.tar.gz \
+    && tar -C /usr/local/bin -xzvf /tmp/dockerize.tar.gz \
+    && rm -rf /tmp/dockerize.tar.gz
+
+COPY docker/runner/config/application.tmpl /config/application.tmpl
+COPY docker/runner/README.md docker/runner/run.sh /
+COPY target/portal-backend-DOCKER_BUILD.jar backend.jar
 
 EXPOSE 8080
 
-CMD ["dockerize", "-template", "/config/application.tmpl:/config/application.yml", "java", "-jar", "backend.jar"]
+CMD ["./run.sh"]
diff --git a/docker/runner/README.md b/docker/runner/README.md
index 564ebd0a6..3e4ab2aaa 100644
--- a/docker/runner/README.md
+++ b/docker/runner/README.md
@@ -10,6 +10,7 @@ You need to configure a few things using some environment variables.
 Environment variables:
 
 * DB_URL: JDBC URL to connect to the database, for example "jdbc:postgresql://db:5432/portal"
+* DB_SERVER: optional, address of the database server, for example DB_SERVER="db:5432". Used to wait for the database to be up and running.
 * DB_USER: User to use when connecting to the database
 * DB_PASSWORD: Password to use when connecting to the database
 * CONTEXT_PATH:  context path appended to all services running in this container. Default to "/services"
diff --git a/docker/runner/run.sh b/docker/runner/run.sh
new file mode 100755
index 000000000..fbeb22269
--- /dev/null
+++ b/docker/runner/run.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+OPTS="-template /config/application.tmpl:/config/application.yml"
+if [ ! -z "$DB_SERVER" ]; then
+  OPTS="$OPTS -wait $DB_SERVER -timeout 60s"
+fi
+dockerize $OPTS java -jar backend.jar
-- 
GitLab