如何限制其他容器的执行,直到在docker-compose中的docker中的数据库容器上执行了所有脚本之前

时间:2018-08-20 10:27:40

标签: docker docker-compose boot2docker

我要等到mysql容器或oracle容器中脚本的完整执行,然后下一次执行应在docker-compose中进行。我已经尝试过depends_on,wait-for-it.sh,但是我无法完全满足我的要求。所有容器同时启动。

2 个答案:

答案 0 :(得分:0)

docker仅在容器启动并运行时注册。容器内部的进程是否准备就绪,它不会注册。

您可以检查其他服务是否准备接受以下连接:

 bash -c "while ! nc -w 1 -z other_service 5432; do sleep 0.2; echo 'waiting for other_service...'; done;"

这是一个无限循环,一旦其他服务开始接受连接,该循环就会停止。

因此,您只需要在启动命令的开头添加此行。 (同样,您还需要在容器中安装nc和bash)

答案 1 :(得分:0)

我在另一个应用程序的dockerfile中的Entrypoint中添加了超时为300秒的睡眠,以便它将睡眠一段时间,直到成功执行DB脚本为止。我通过检查脚本执行所花费的总时间来大致估算出超时时间。

在dockerfile中添加了以下内容

Entrypoint sleep 300和其他命令

相关问题