![有没有办法让这两个docker bash命令同步执行?](https://linux22.com/image/677656/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E8%AE%A9%E8%BF%99%E4%B8%A4%E4%B8%AAdocker%20bash%E5%91%BD%E4%BB%A4%E5%90%8C%E6%AD%A5%E6%89%A7%E8%A1%8C%EF%BC%9F.png)
我正在自动设置我的应用程序的开发环境,当我从命令行手动运行这两个命令时,我必须在运行第一个命令后等待大约 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