Skip to content

Instantly share code, notes, and snippets.

@nicerobot
Created June 27, 2017 14:30
Show Gist options
  • Save nicerobot/1136dcfba6ce3da67ce3ded5101a4078 to your computer and use it in GitHub Desktop.
Save nicerobot/1136dcfba6ce3da67ce3ded5101a4078 to your computer and use it in GitHub Desktop.
A better wait-for-postgres.sh
#!/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 ${@}
@therohk
Copy link

therohk commented Nov 7, 2021

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