2

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

4

1 回答 1

0

bash 命令中的嗯,如果在每个和其他完成后执行换行。 -ddocker-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
于 2018-12-07T16:57:11.920 回答