我编写了一个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脚本中使用。
答案 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