如何在docker-compose中的docker中的DB容器上执行所有脚本之前限制其他容器的执行

问题描述 投票:1回答:2

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

docker docker-compose boot2docker
2个回答
0
投票

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)


0
投票

我在其他应用程序的dockerfile的Entrypoint中添加了300秒超时的睡眠,这样它就会睡眠一段时间,直到DB脚本成功执行。我粗略地通过检查脚本执行所花费的总时间来估计超时。

在dockerfile中添加如下

入口点睡眠300 &&其他命令

© www.soinside.com 2019 - 2024. All rights reserved.