Назад | Перейти на главную страницу

Есть ли способ заставить эти две команды docker bash выполняться синхронно?

Я автоматизирую настройку среды разработки для своего приложения, и когда я запускаю эти две команды вручную из командной строки, мне приходится ждать около 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