Как ждать, пока docker-entrypoint-initdb.d загрузит БД в Shell Script / Bash? - PullRequest
0 голосов
/ 07 декабря 2018

Я написал сценарий оболочки, чтобы перестроить тестовую БД и загрузить dumps.sql в docker-entrypoint-initdb.d, а затем выполнить тесты phpunit.

docker-compose stop mysql
sudo rm -Rf ~/.laradock/data/mysql
docker-compose up --force-recreate --build -d mysql
docker-compose up -d nginx
docker-compose exec workspace phpunit

Это работает нормально.Однако третья строка выполняет дампы загружаются в фоновом режиме и занимает некоторое время для загрузки.Когда выполняется последняя строка, дампы БД все еще загружаются

Мне нужно подождать около 1 или 2 минут.То, что я ищу, - это решение, подобное: - Сон между двумя командами оболочки ИЛИ (для лучшего кода) - Заставить последнюю строку ждать полного выполнения загрузки дампа.

Как я могу знать, чтоdocker-entrypoint-initdb.d, вызываемый при перестройке контейнера, полностью загружен?Для использования в сценарии оболочки.

1 Ответ

0 голосов
/ 07 декабря 2018

Хм в командах bash, если после новой строки выполняются новые и другие команды.-d опция для docker-compose, вероятно, отправляет процесс в фоновый режим.Поэтому в этом случае попробуйте использовать команду wait, которая ожидает всех дочерних процессов:

docker-compose stop mysql
sudo rm -Rf ~/.laradock/data/mysql
docker-compose up --force-recreate --build -d mysql
docker-compose up -d nginx
wait
docker-compose exec workspace phpunit

Если это не поможет, вы можете попробовать также эту опцию удаления -d и отправить процессы в фоновый режим с помощью bash&:

docker-compose stop mysql
sudo rm -Rf ~/.laradock/data/mysql
docker-compose up --force-recreate --build mysql &
docker-compose up nginx &
wait
docker-compose exec workspace phpunit
...