PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Flyway kann innerhalb des Skripts docker-entrypoint-initdb.d keine Verbindung zum Postgres-Container herstellen

Ich hatte das gleiche Problem beim Ausführen von Flyway, als ich ein Docker-Image für meine Datenbank basierend auf dem postgres:10.5-Image erstellte. Ich habe Folgendes zu meiner entrypoint.sh hinzugefügt, bevor ich Flyway ausgeführt habe, um zu bestätigen, dass das Problem, das ich gesehen habe, durch die Änderung von docker-entrypoint.sh verursacht wurde, die @Nick Maraston in seiner Antwort gepostet hat:

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

Das Ergebnis war, dass der obige Code für immer geloopt wurde. Ich habe es dann durch den folgenden Code ersetzt, um die Datenbank neu zu starten, die auf TCP/IP-Verbindungen auf localhost lauscht:

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

Anstatt die Datenbank auf diese Weise neu zu starten, wäre es eine sauberere Lösung, die JDBC -socketFactory zu verwenden Option erklärt hier .