如何等待docker entrypoint initdb.d在shell script/bash中加载db?

06odsfpq  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(845)

我编写了一个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

这很有效。但是,第三行执行转储,转储在后台加载,需要一些时间才能加载。当最后一行被执行时,数据库转储仍然被加载
我得等一两分钟。我想要的是这样一个解决方案:-在两个shell命令之间休眠,或者(为了更好的代码)-让最后一行等待转储加载的完全执行。
我怎么知道容器重建时调用的docker entrypoint initdb.d已完全加载?在shell脚本中使用。

vsmadaxz

vsmadaxz1#

在bash中的hmm命令,如果在新行上,则在每一行和另一行完成后执行。 -d docker compose的选项可能会将进程发送到后台。所以在这种情况下,试着用 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

相关问题