Created
June 27, 2017 14:30
-
-
Save nicerobot/1136dcfba6ce3da67ce3ded5101a4078 to your computer and use it in GitHub Desktop.
A better wait-for-postgres.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash -e | |
# wait-for-postgres.sh | |
# Adapted from https://docs.docker.com/compose/startup-order/ | |
# Expects the necessary PG* variables. | |
until psql -c '\l'; do | |
echo >&2 "$(date +%Y%m%dt%H%M%S) Postgres is unavailable - sleeping" | |
sleep 1 | |
done | |
echo >&2 "$(date +%Y%m%dt%H%M%S) Postgres is up - executing command" | |
exec ${@} |
This example (as the original one in the docker website) is using the psql command. This command is not available in the "webapp" service though (only available in the "db" service). Am I getting something wrong?
You will need to install the "postgresql-client" package for these commands to be available in the webapp.
The included pg_isready
command achieves the same as above without the retry limit.
See the complete config using this technique here.
A simplified Dockerfile is shown below. You will need to include a pgsql
link for hostname in docker-compose.yml.
FROM openjdk:11
RUN apt-get update && apt-get install -y procps curl net-tools telnet
RUN apt-get install -y postgresql-client
#other things
COPY build/libs/app-0.0.1.war app.war
EXPOSE 8080
CMD until pg_isready --host=pgsql; do sleep 1; done \
&& java -jar app.war
For the above script replace the CMD with :
CMD wait-for-postgres.sh && java -jar app.war
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
"Better" is subjective. It's more versatile maybe. That doesn't always mean better ;-) Simplicity also matters and I didn't need a retry limit.
Also, I wouldn't provide the
--dbname
flag.psql
supportsPG*
environment variables. Let the caller provide them in the waypsql
already expects.I would also adhere to a different Bash style.
So if you want retries and want a truly better variant, I would write it like this: