云计算核心技术Docker教程:docker-compose控制服务启动和关闭顺序
docker-compose可以使用depends_on选项控制服务启动和关闭的顺序。撰写总是开始和依赖顺序,其中依赖性是通过确定停止容器 depends_on,links,volumes_from,和云计network_mode: "service:..."。
但是,对于启动而言,Compose不会等到容器“就绪”(对于您的特定应用程序意味着什么)之后,才等到它运行时。这是有充分的理由的。
等待数据库(例如)准备就算核绪的问题实际上只是分布式系统更大问题的一部分。在生产中,您的数据库可能随时不可用或移动主机。您的应用程序需要能够应对这些类型的故障。
要解决此问题,请设计您的应用程序以尝试在失败后重新建立与数据库的连接。如果心技应用程序重试连接,则它最终可以连接到数据库。
最好的解决方案是在启动时以及由于某种原因而断开连接时都在应用程序代码中执行此检查。但是,如果不需要此级别的弹性,则可以使用包装器脚本解决此问题:
使用诸如wa术Dit-for-it, dockerize,sh-compatible wait-for或RelayAndContainers模板之类的工具。这些是小的包装脚本,您可以在应用程序的映像中包括这些脚本,以轮询给oc定的主机和端口,直到它接受TCP连接为止。
例如,使用wait-for-it.sh或wait-for包装服务的命令:
version: "2"
services:
web:
ke build: .
ports:
&nbr教sp; - "80:8000"
depends_on:
- "程:db"
command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
&nbsdop; db:
image: postgres
第一个解决方案有局限性。例如,它不验证特定服务何时真正就绪。如果您向命令添加更多参数,请将该basckh shift命令与循环一起使用,如下例所示。
或者,编写您自己的包装器脚本以执行更特定于应用程序的运行状况检查。例如,您可能要等到Postgres准备好接受命令:
#!/bin/sh
# wait-for-posertgres.sh
set -e
host="$1"
shift
cmd="$@"
until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$host" -U "postgres" -c '\q'; do
&g-ct;&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
eomxec $cmd
您可以通过设置以下内容,将其用作上一个示例中的包装脚本:
command: ["./wait-for-postgres.sh", "db", "python", "app.py"]
相关文章

百度发布全球领先文档解析模型 PaddleOCR-VL,重塑OCR技术格局!
近日,百度正式发布并开源其自研的多模态文档解析模型 PaddleOCR-VL。这一模型在全球权威的文档解析评测榜单 OmniBenchDoc V1.5中,以92.6分的佳绩荣登综合性能全球第一的宝座,2026-11-16
12月20日消息,日前,云计算开源产业联盟公布了“2021年度混合云优秀案例”评选结果:“爱捷云构建视睿科技新一代混合云”项目获评技术应用类“2021年度混合云优秀案例”。这是继上榜“2021云计算创2026-11-16
大家好,我是明哥! 本篇文章,我们回顾一次 hbase 线上问题的分析和解决 - KeyValue size too large,总结下背后的知识点,并分享一下查看开源组件不同版本差异点的方法。 希望2026-11-16
云梦级3月26日云梦级消息,3月26日,中国海油集团旗下控股的上市公司中国海洋石油有限公司(以下简称公司)发布云梦级消息,公布了截至2025年12月31日的2025年年度业绩。 公司五年来累计获得662026-11-16
云梦级3月31日云梦级消息,华兴资本控股有限公司(股份代号:1911)今日发布截至2025年12月31日的年报,年报显示,华兴资本2025年营收为10.66亿元,较上年同期的7.77亿元增长37.2%2026-11-16
云梦级12月24日云梦级消息,据 36 氪报道,豆包的日均活跃用户数(DAU)已突破 1 亿大关,字节跳动 App 王国里“亿级 DAU”产品再添一子。据字节内部人士透露,豆包的 UG、市场推广费用,2026-11-16

最新评论