我要等到mysql容器或oracle容器中脚本的完整执行,然后下一次执行应在docker-compose中进行。我已经尝试过depends_on,wait-for-it.sh,但是我无法完全满足我的要求。所有容器同时启动。
答案 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和其他命令