有没有办法让这两个docker bash命令同步执行?

有没有办法让这两个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)

你知道只有当第一个命令完成所有需要做的事情后,我才能获取第二个命令吗?

答案1

如果可以接受 shell 脚本,也许最简单的方法是尝试上传,等待 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

相关内容