Docker - check if postgres is ready
I tried wait-for-it, but it may be a problem to run it in docker container as in the docker image may not be installed nc (sometimes there is not even ping, telnet, curl..). So to check if the DB is up and running I have used HealthCheck in docker compose file what was checking return value of pg_isready, what is part of postgres database, so you do not need to install anything into docker images:
version: '2.3'
services:
postgres-db:
image: postgresImage
healthcheck:
test: /usr/bin/pg_isready
interval: 5s
timeout: 10s
retries: 120
ports:
- '5432:5432'
aplication:
image: applicationImage
depends_on:
postgres-db:
condition: service_healthy
Here is a shell one liner using pg_isready
tool provided by PostgreSQL.
To call outside docker:
DOCKER_CONTAINER_NAME="mypgcontainer"
timeout 90s bash -c "until docker exec $DOCKER_CONTAINER_NAME pg_isready ; do sleep 5 ; done"
Based on a post from Jeroma Belleman.