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

Docker-compose hängt davon ab, nicht zu warten, bis der abhängige Dienst nicht vollständig gestartet ist

Ja.

Machen Sie sich zuerst klar, dass depends-on ist ist fast völlig nutzlos. Docker weiß nichts über Ihre Anwendung; es kann nicht erkennen, dass Ihr Datenbankserver nicht wirklich bereit ist, Anfragen zu bedienen.

Die richtige Lösung besteht darin, Ihre Anwendung so zu codieren, dass (a) sie die anfängliche Datenbankverbindung wiederholt, bis sie bereit ist, und (b) sie sich erneut mit der Datenbank verbindet, falls die Verbindung fehlschlagen sollte. (a) löst das Problem, nach dem Sie fragen, und (b) ermöglicht Ihnen, den Datenbankcontainer unabhängig vom Anwendungscontainer neu zu starten.

Wenn Sie den Code in Ihrem Anwendungscontainer nicht kontrollieren, können Sie Ihren Hauptbefehl mit einem Shell-Skript umschließen, das so etwas tut:

while ! psql -c 'select 1'; do
  sleep 1
done

(Einstellung geeigneter Authentifizierungsoptionen oder Einrichtung eines .pgpass Datei)