我想等到mysql容器或oracle容器中脚本的完整执行,然后下一次执行应该发生在docker-compose中。我已经尝试过depends_on,wait-for-it.sh,但我无法满足我的要求。所有容器同时启动。
docker仅在容器启动并运行时进行注册。如果容器内的进程准备就绪,则不会注册。
您可以检查其他服务是否已准备好接受以下连接:
bash -c "while ! nc -w 1 -z other_service 5432; do sleep 0.2; echo 'waiting for other_service...'; done;"
这是一个无限循环,一旦其他服务开始接受连接就会停止。
所以你只需要在startup-command的开头添加这一行。 (还需要在容器中安装nc和bash)
我在其他应用程序的dockerfile的Entrypoint中添加了300秒超时的睡眠,这样它就会睡眠一段时间,直到DB脚本成功执行。我粗略地通过检查脚本执行所花费的总时间来估计超时。
在dockerfile中添加如下
入口点睡眠300 &&其他命令