如何等待docker-entrypoint-initdb.d在Shell脚本/ Bash中加载数据库?

时间:2018-12-07 16:38:38

标签: mysql shell docker laradock

我编写了一个shell脚本来重建测试数据库,并在docker-entrypoint-initdb.d上加载dumps.sql,然后执行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分钟。我想要的是一个类似的解决方案:  -在2个Shell命令之间进行睡眠或(以获取更好的代码)  -让最后一行等待转储加载的完全执行。

我怎么知道重建容器时调用的docker-entrypoint-initdb.d已满载?要在shell脚本中使用。

1 个答案:

答案 0 :(得分:0)

bash命令中的Hmm(如果换行)在彼此完成之后执行。 docker-compose的-d选项可能会将进程发送到后台。因此,在这种情况下,请尝试使用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