PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

flyway non è in grado di connettersi al contenitore postgres all'interno dello script docker-entrypoint-initdb.d

Ho avuto lo stesso problema durante l'esecuzione di Flyway durante la creazione di un'immagine Docker per il mio database basata sull'immagine postgres:10.5. Ho aggiunto quanto segue al mio entrypoint.sh prima di eseguire flyway, per confermare che il problema che stavo vedendo era causato dalla modifica docker-entrypoint.sh che @Nick Maraston ha pubblicato nella sua risposta:

echo "$(date) - waiting for database to start"
while ! pg_isready -h localhost -p 5432 -d $POSTGRES_DB
do
    echo "$(date) - waiting for database to start"
    sleep 10
done

Il risultato è stato che il codice sopra è stato eseguito in loop per sempre. L'ho quindi sostituito con il codice seguente per riavviare il database in attesa di connessioni TCP/IP su localhost:

pg_ctl -D "$PGDATA" -m fast -w stop
pg_ctl -D "$PGDATA" \
            -o "-c listen_addresses='localhost'" \
            -w start

Invece di riavviare il database in questo modo, una soluzione più pulita sarebbe usare JDBC -socketFactory opzione spiegata qui .