Zde je toho hodně k vysvětlení, ale propojím jednu ze svých předchozích odpovědí na podobný problém – kroky jsou ve skutečnosti stejné, protože se liší pouze databázová služba a pozadí.
1) První věc je, že musíte poskytnout bash skript, který počká, dokud služba neodpoví přes http. V databázích se to obvykle stává, když je DB připravena k použití a všechny inicializace jsou hotové.
skript wait-for-it.sh napsaný vishnubobem v jeho čekání repo @ github.
2) Druhá věc, musíte ten skript dostat do každého kontejneru, který vyžaduje vaši DB.
3) Za třetí, určíte entrypoint
ve vašem souboru pro psaní, který spustí čekající skript před skutečným command
spuštění vaší služby se spustí.
příklad vstupního bodu (jako odkaz na odpověď, na kterou odkazuji)
docker-entrypoint.sh:
#!/bin/bash
set -e
sh -c './wait-for-it.sh oracle:3306 -t 30'
exec "[email protected]"
Všechny tyto kroky jsou podrobně vysvětleny zde ve scénáři 2, uvědomte si odkaz na mou další odpověď uvnitř odpovědi, na kterou zde poukazuji. Tento problém je velmi častým problémem pro začátečníky a vyžaduje poměrně hodně vysvětlení, takže to sem nemohu celé zveřejnit.
poznámka zde týkající se depends_on
což si můžete myslet, že je nativním řešením tohoto problému od dockeru – jak uvádí docs, čeká se pouze na spuštění kontejneru, ve skutečnosti nedokončí své interní úlohy – docker si není vědom toho, kolik toho je třeba udělat.