Hier gibt es viel zu erklären, aber ich verlinke eine meiner vorherigen Antworten für ein ähnliches Problem - die Schritte sind eigentlich gleich, da sich nur der Datenbankdienst und der Hintergrund unterscheiden.
1) Als erstes müssen Sie ein Bash-Skript bereitstellen, das wartet, bis ein Dienst über http antwortet. In Datenbanken geschieht dies normalerweise, wenn die DB betriebsbereit ist und alle Initialisierungen abgeschlossen sind.
das Wait-for-it.sh-Skript, geschrieben von vishnubob in seinem warten repo @ github.
2) Zweitens müssen Sie dieses Skript in jeden Container bekommen, der Ihre DB benötigt.
3) Drittens geben Sie einen entrypoint
an in Ihrer Compose-Datei, die das wartende Skript vor dem eigentlichen command
ausführt Das Ausführen Ihres Dienstes wird ausgelöst.
Beispiel für einen Einstiegspunkt (als Verweis auf die Antwort, auf die ich verlinke)
docker-entrypoint.sh:
#!/bin/bash
set -e
sh -c './wait-for-it.sh oracle:3306 -t 30'
exec "[email protected]"
Alle diese Schritte werden hier in Szenario 2 ausführlich erläutert. Achten Sie auf einen Verweis auf meine andere Antwort in der Antwort, auf die ich hier zeige. Dieses Problem ist ein sehr häufiges Problem für Anfänger und erfordert eine Menge Erklärungen, daher kann ich hier nicht alles posten.
Hinweis hier bezüglich depends_on
was Sie vielleicht für eine native Lösung für dieses Problem von Docker halten - wie in der Dokumentation angegeben, wartet es nur, bis der Container ausgeführt wird, und beendet nicht seine internen Jobs - Docker ist sich nicht bewusst, wie viel zu tun ist.