Docker wait for postgresql to be running Docker wait for postgresql to be running postgresql postgresql

Docker wait for postgresql to be running


I've spent some hours investigating this problem and I got a solution.Docker depends_on just consider service startup to run another service. Than it happens because as soon as db is started, service-app tries to connect to ur db, but it's not ready to receive connections. So you can check db health status in app service to wait for connection. Here is my solution, it solved my problem. :)Important: I'm using docker-compose version 2.1.

version: '2.1'services:  my-app:    build: .    command: su -c "python manage.py runserver 0.0.0.0:8000"    ports:       - "8000:8000"    depends_on:      db:        condition: service_healthy    links:      - db    volumes:      - .:/app_directory  db:    image: postgres:10.5    ports:      - "5432:5432"    volumes:      - database:/var/lib/postgresql/data    healthcheck:      test: ["CMD-SHELL", "pg_isready -U postgres"]      interval: 5s      timeout: 5s      retries: 5volumes:  database:

In this case it's not necessary to create a .sh file.I hope it helps you guys ;)cya


This will successfully wait for Postgres to start. (Specifically line 6). Just replace npm start with whatever command you'd like to happen after Postgres has started.

services:  practice_docker:     image: dockerhubusername/practice_docker    ports:       - 80:3000    command: bash -c 'while !</dev/tcp/db/5432; do sleep 1; done; npm start'    depends_on:      - db    environment:      - DATABASE_URL=postgres://postgres:password@db:5432/practicedocker      - PORT=3000     db:    image: postgres    environment:      - POSTGRES_USER=postgres      - POSTGRES_PASSWORD=password      - POSTGRES_DB=practicedocker


If you have psql you could simply add the following code to your .sh file:

RETRIES=5until psql -h $PG_HOST -U $PG_USER -d $PG_DATABASE -c "select 1" > /dev/null 2>&1 || [ $RETRIES -eq 0 ]; do  echo "Waiting for postgres server, $((RETRIES--)) remaining attempts..."  sleep 1done