Er valt hier veel uit te leggen, maar ik zal een van mijn eerdere antwoorden voor een soortgelijk probleem koppelen - de stappen zijn eigenlijk hetzelfde omdat alleen de databaseservice en de achtergrond verschillen.
1) Het eerste is dat je een bash-script moet opgeven dat wacht tot een service via http reageert. In databases gebeurt het meestal wanneer DB klaar is voor gebruik en alle initialisaties zijn voltooid.
het wait-for-it.sh script geschreven door vishnubob in zijn wait-for-it repo @ github.
2) Ten tweede moet je dat script in elke container krijgen die je DB nodig heeft.
3) Ten derde specificeert u een entrypoint
in je opstelbestand, dat het wachtende script zal uitvoeren voor het daadwerkelijke command
het uitvoeren van uw service wordt geactiveerd.
voorbeeld van een ingangspunt (als verwijzing naar het antwoord waarnaar ik link)
docker-entrypoint.sh:
#!/bin/bash
set -e
sh -c './wait-for-it.sh oracle:3306 -t 30'
exec "[email protected]"
Al deze stappen worden hier in scenario 2 in detail uitgelegd, let op een verwijzing naar mijn andere antwoord in het antwoord waarnaar ik hier verwijs. Dit probleem is een veel voorkomend probleem voor beginners en vereist veel uitleg, dus ik kan het hier niet allemaal posten.
opmerking hier over depends_on
waarvan je zou denken dat het een native oplossing is voor dit probleem van docker - zoals docs aangeeft, wacht het alleen tot de container draait, niet echt zijn interne taken afmaakt - docker weet niet hoeveel er moet gebeuren.