Как ограничить выполнение другого контейнера до тех пор, пока все сценарии не будут выполнены на контейнере БД в 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 внутри вашего контейнера)

Другие вопросы по тегам