首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

控制启动顺序 | Control startup order (Compose)

您可以使用depends_on选项来控制服务启动的顺序。撰写总是依赖顺序,其中依赖性是通过确定启动容器depends_onlinksvolumes_from,和network_mode: "service:..."

但是,Compose不会等到容器“准备就绪”(无论对于您的特定应用程序而言意味着什么) - 直到它运行为止。这有一个很好的理由。

等待数据库(例如)准备就绪的问题实际上只是分布式系统的一个更大问题的一个子集。在生产中,您的数据库可能随时无法使用或移动主机。您的应用程序需要适应这些类型的故障。

为了处理这个问题,应用程序应该尝试在失败后重新建立到数据库的连接。如果应用程序重试连接,它应该最终能够连接到数据库。

最好的解决方案是在你的应用程序代码中执行这个检查,无论是在启动时,还是因任何原因丢失连接。但是,如果您不需要此级别的恢复能力,则可以使用包装脚本解决该问题:

  • 使用一个工具,如等待dockerize或sh兼容等待。这些小包装脚本可以包含在应用程序的映像中,并将轮询给定的主机和端口,直到它接受TCP连接。例如,要使用wait-for-it.shwait-for包装服务的命令:version:“2”services:web:build:。端口: - “80:8000”depends_on: - “db”命令:“./wait-for-it.sh”,“db:5432”,“ - ”,“python”,“app.py”db: image:postgres 提示:这种第一种解决方案存在局限性; 例如,它不会验证特定服务何时准备就绪。如果您为命令添加更多参数,bash shift 带循环的命令,如下一个示例所示。
  • 或者,编写自己的包装脚本以执行更多特定于应用程序的运行状况检查。例如,您可能要等到Postgres完全准备好接受命令:#!/ bin / bash#wait-for-postgres.sh set -e host =“$ 1”shift cmd =“$ @”,直到psql -h “$ host”-U“postgres”-c'\ l'; do>&2 echo“Postgres is unavailable - sleeping”sleep 1 done>&2 echo“Postgres正在执行 - 执行命令”exec $ cmd您可以像上例那样使用它作为包装脚本,方法是:command:“./ wait-for-postgres.sh“,”db“,”python“,”app.py“

撰写文件

  • 安装Compose
  • 开始使用Django
  • 开始使用Rails
  • 开始使用WordPress
  • 命令行参考
  • 撰写文件参考

扫码关注腾讯云开发者

领取腾讯云代金券