Tak.
Po pierwsze, zdaj sobie sprawę, że depends-on
jest prawie całkowicie bezużyteczny. Docker nie wie nic o Twojej aplikacji; nie ma możliwości stwierdzenia, że serwer bazy danych nie jest w rzeczywistości gotowy do obsługi żądań.
Prawidłowym rozwiązaniem jest zakodowanie aplikacji w taki sposób, aby (a) ponawiała początkowe połączenie z bazą danych, dopóki nie będzie gotowe, oraz (b) ponownie nawiąże połączenie z bazą danych, jeśli połączenie się nie powiedzie. (a) rozwiązuje problem, o który pytasz, i (b) pozwala na ponowne uruchomienie kontenera bazy danych niezależnie od kontenera aplikacji.
Jeśli nie kontrolujesz kodu w kontenerze aplikacji, możesz otoczyć swoje główne polecenie skryptem powłoki, który robi coś takiego:
while ! psql -c 'select 1'; do
sleep 1
done
(Ustawianie odpowiednich opcji uwierzytelniania lub konfigurowanie .pgpass
plik)