Miałem ten sam problem z uruchomieniem flywaya podczas tworzenia obrazu dockera dla mojej bazy danych na podstawie obrazu postgres:10.5. Dodałem następujący plik do mojego entrypoint.sh przed uruchomieniem flyway, aby potwierdzić, że problem, który widziałem, był spowodowany zmianą docker-entrypoint.sh, którą @Nick Maraston opublikował w swojej odpowiedzi:
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
W rezultacie powyższy kod zapętlił się na zawsze. Następnie zastąpiłem go następującym kodem, aby ponownie uruchomić bazę danych nasłuchującą połączeń TCP/IP na hoście lokalnym:
pg_ctl -D "$PGDATA" -m fast -w stop
pg_ctl -D "$PGDATA" \
-o "-c listen_addresses='localhost'" \
-w start
Zamiast restartować bazę danych w ten sposób, czystszym rozwiązaniem byłoby użycie JDBC -socketFactory
opcja wyjaśniona tutaj
.