C'è molto da spiegare qui, ma collegherò una delle mie risposte precedenti per un problema simile:i passaggi sono in realtà gli stessi perché solo il servizio di database e lo sfondo differiscono.
1) La prima cosa è che devi fornire uno script bash che attenderà fino a quando un servizio non risponderà tramite http. Nei database di solito accade quando il DB è pronto per l'uso e tutte le inizializzazioni sono state eseguite.
lo script wait-for-it.sh scritto da vishnubob nel suo attendere repository @ github.
2) Seconda cosa, devi ottenere quello script all'interno di ogni contenitore che richiede il tuo DB.
3) Terzo, specifichi un entrypoint
nel tuo file di composizione, che eseguirà lo script in attesa prima dell'effettivo command
si attiverà l'esecuzione del servizio.
esempio di punto di ingresso (come riferimento alla risposta a cui mi collego)
docker-entrypoint.sh:
#!/bin/bash
set -e
sh -c './wait-for-it.sh oracle:3306 -t 30'
exec "[email protected]"
Tutti questi passaggi sono spiegati in dettaglio qui nello scenario 2, essere consapevoli di un riferimento alla mia altra risposta all'interno della risposta che sto indicando qui. Questo problema è molto comune per i principianti e richiede molte spiegazioni, quindi non posso pubblicarlo tutto qui.
nota qui riguardo a depends_on
che potresti pensare sia una soluzione nativa per questo problema da Docker - come stato dei documenti, aspetta solo che il contenitore sia in esecuzione, non ha effettivamente terminato i suoi lavori interni - Docker non è a conoscenza di quanto c'è da fare.