Как ограничить выполнение другого контейнера до тех пор, пока все сценарии не будут выполнены на контейнере БД в Docker в Docker-compose
Я хочу дождаться полного выполнения сценариев в контейнере mysql или контейнере oracle, тогда следующее выполнение должно произойти в docker-compose. Я попытался зависящим, подождать, но я не могу полностью заполнить мое требование. Все контейнеры запускаются одновременно.
2 ответа
Я добавил режим сна с тайм-аутом в 300 секунд в Entrypoint в dockerfile другого приложения, чтобы он не работал некоторое время до тех пор, пока сценарии БД не будут выполнены успешно. Я приблизительно оценил время ожидания, проверив общее время выполнения сценариев.
Добавлено ниже в Dockerfile
Entrypoint sleep 300 && другая команда
Докер регистрируется только когда контейнер запущен и работает. Он не регистрируется, если процессы внутри контейнера готовы.
Вы можете проверить, готова ли другая служба принять соединение с:
bash -c "while ! nc -w 1 -z other_service 5432; do sleep 0.2; echo 'waiting for other_service...'; done;"
Это бесконечный цикл, который останавливается, как только другой сервис начинает принимать соединения.
Так что вам просто нужно добавить эту строку в начале вашей команды запуска. (также вы должны установить nc и bash внутри вашего контейнера)