控制启动顺序 | Control startup order (Compose)
在Compose中控制启动顺序
您可以使用depends_on
选项来控制服务启动的顺序。撰写总是依赖顺序,其中依赖性是通过确定启动容器depends_on
,links
,volumes_from
,和network_mode: "service:..."
。
但是,Compose不会等到容器“准备就绪”(无论对于您的特定应用程序而言意味着什么) - 直到它运行为止。这有一个很好的理由。
等待数据库(例如)准备就绪的问题实际上只是分布式系统的一个更大问题的一个子集。在生产中,您的数据库可能随时无法使用或移动主机。您的应用程序需要适应这些类型的故障。
为了处理这个问题,应用程序应该尝试在失败后重新建立到数据库的连接。如果应用程序重试连接,它应该最终能够连接到数据库。
最好的解决方案是在你的应用程序代码中执行这个检查,无论是在启动时,还是因任何原因丢失连接。但是,如果您不需要此级别的恢复能力,则可以使用包装脚本解决该问题:
- 使用一个工具,如等待,dockerize或sh兼容等待。这些小包装脚本可以包含在应用程序的映像中,并将轮询给定的主机和端口,直到它接受TCP连接。例如,要使用
wait-for-it.sh
或wait-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
带循环的命令,如下一个示例所示。
撰写文件
- 安装Compose