Тук има много за обяснение, но ще свържа един от предишните си отговори за подобен проблем - стъпките всъщност са едни и същи, защото само услугата за база данни и фонът се различават.
1) Първото нещо е, че трябва да предоставите bash скрипт, който ще изчака, докато услугата ще отговори чрез http. В базите данни това обикновено се случва, когато DB е готова за работа и всички инициализации са извършени.
скриптът wait-for-it.sh, написан от vishnubob в неговото изчакване repo @ github.
2) Второ нещо, трябва да получите този скрипт във всеки контейнер, който изисква вашата DB.
3) Трето, посочвате entrypoint
във вашия файл за композиране, който ще изпълни чакащия скрипт преди действителната command
стартирането на вашата услуга ще се задейства.
пример за входна точка (като препратка към отговора, към който се свързвам)
docker-entrypoint.sh:
#!/bin/bash
set -e
sh -c './wait-for-it.sh oracle:3306 -t 30'
exec "[email protected]"
Всички тези стъпки са обяснени подробно тук в сценарий 2, имайте предвид препратка към моя друг отговор в отговора, който посочвам тук. Този проблем е много често срещан проблем за начинаещи и изисква доста обяснения, така че не мога да го публикувам целия тук.
забележка тук относно depends_on
което може да си помислите, че е естествено решение за този проблем от docker – както гласи документите, той само изчаква, докато контейнерът се изпълни, а всъщност не завърши вътрешните си задачи – docker не е наясно колко много трябва да се направи.