Я автоматизирую настройку среды разработки для своего приложения, и когда я запускаю эти две команды вручную из командной строки, мне приходится ждать около 10 секунд после запуска первой, чтобы запустить вторую.
# command one (run the mysql docker container)
docker run -p 3306:3306 --name mysql-container-name -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=mydbname -d mysql:latest
# command two (import data into created db)
docker exec -i mysql-container-name mysql mydbname < ./dev-db.sql --password=secret
Я пытаюсь автоматизировать эти две команды в псевдоним bash, чтобы я мог просто сделать db-setup
но даже когда я разделяю команды с помощью &&, вторая команда выполняется слишком быстро (очевидно, до того, как контейнер mysql будет полностью настроен), потому что я получу эту ошибку:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Есть идеи, как я могу получить вторую команду только тогда, когда первая полностью закончила со всем, что ей нужно сделать?
Если сценарий оболочки приемлем, возможно, самый простой способ - это попробовать загрузку, подождать 5 секунд и повторить попытку загрузки, пока она не заработает. Что-то вроде этого:
docker run -p 3306:3306 --name mysql-container-name -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=mydbname -d mysql:latest
until [docker exec -i mysql-container-name mysql mydbname < ./dev-db.sql --password=secret]
do
sleep 5
done