Jest tu wiele do wyjaśnienia, ale połączę jedną z moich poprzednich odpowiedzi na podobny problem - kroki są w rzeczywistości takie same, ponieważ różni się tylko usługa bazy danych i tło.
1) Po pierwsze, musisz dostarczyć skrypt bash, który będzie czekał, aż usługa odpowie przez http. W bazach danych zwykle dzieje się tak, gdy DB jest gotowy do pracy i wszystkie inicjalizacje są zakończone.
skrypt wait-for-it.sh napisany przez vishnuboba w jego poczekaj na to repozytorium @ github.
2) Po drugie, musisz umieścić ten skrypt w każdym kontenerze, który wymaga Twojej bazy danych.
3) Po trzecie, określasz entrypoint
w twoim pliku tworzenia, który wykona oczekujący skrypt przed właściwym command
uruchomienie usługi zostanie uruchomione.
przykład punktu wejścia (jako odniesienie do odpowiedzi, do której linkuję)
docker-entrypoint.sh:
#!/bin/bash
set -e
sh -c './wait-for-it.sh oracle:3306 -t 30'
exec "[email protected]"
Wszystkie te kroki są szczegółowo wyjaśnione w scenariuszu 2, pamiętaj o odwołaniu do mojej innej odpowiedzi w odpowiedzi, którą tutaj wskazuję. Ten problem jest bardzo częstym problemem dla początkujących i wymaga wielu wyjaśnień, więc nie mogę go tutaj opublikować.
notatka tutaj dotyczące depends_on
które możesz pomyśleć, że jest natywnym rozwiązaniem tego problemu z dockera - jak w stanie docs, czeka on tylko na uruchomienie kontenera, a nie ukończenie jego wewnętrznych zadań - docker nie jest świadomy, ile jest do zrobienia.