【问题标题】:How to restrict the execution of other container until all the scripts are executed on DB container in docker in docker-compose如何限制其他容器的执行,直到所有脚本都在 docker-compose 中的 docker 中的 DB 容器上执行
【发布时间】:2018-08-20 10:27:40
【问题描述】:

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

【问题讨论】:

  • 您需要在依赖容器中编写逻辑,以便只有在数据库容器中的脚本执行完成后才能启动其中的进程

标签: docker docker-compose boot2docker


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    我在另一个应用程序的 dockerfile 的入口点中添加了超时为 300 秒的睡眠,以便它会休眠一段时间,直到 DB 脚本成功执行。我通过检查脚本执行所花费的总时间粗略估计了超时时间。

    在dockerfile下面添加

    入口点 sleep 300 && 其他命令

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 2021-05-17
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多