我的 docker 应用程序中有 3 种类型的组件:
- 数据库容器
- 数据库迁移容器(创建和更新架构,在生产中使用)
- 数据库播种(仅用于开发)
当尝试在 docker compose 中运行所有这些服务时,我遇到了排序问题。
我需要数据库可用,然后应用迁移,然后种子 - 按照确切的顺序。
Simple docker compose up
一次带来所有服务,因此它们会因为无法连接到数据库而失败。另一方面使用docker compose up
而不是打电话docker run
自动关闭服务。
我如何开始我的服务,以便他们:
- 使用 docker 运行
- 按正确的顺序开始,并互相等待
- 可以用简单的ctrl+c轻松组合吗?
- 要实现服务订购,请开始使用
docker-compose
use 依赖于取决于 https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on.
...
services:
db:
...
migrations:
depends_on:
- db
...
seeding:
depends_on:
- db
- 然而,按顺序开始可能还不够,因为
db
服务启动后一段时间内可能无法使用。
为了解决这个问题:
- define 健康检查 https://docs.docker.com/compose/compose-file/compose-file-v3/#healthcheck for
db
服务。
- use
depends_on
以下列方式依赖于db
服务:
depends_on:
db:
condition: service_healthy
请参阅工作演示示例here https://github.com/w7089/kafka_simple_demo/blob/9e63de050797fa95e2a3036315979281611a9429/docker-compose.yml#L35.
- Use
service_completed_successfully
with depends_on
在种子服务方面:
depends_on:
migrations:
condition: service_completed_successfully
感谢@David Maze 的建议。
- 在播种服务中实现一些繁忙的等待脚本
command
。更多信息是here https://docs.docker.com/compose/startup-order/。繁忙等待脚本必须检查某些表示迁移已完成的条件。
- 用于停止服务堆栈使用:
docker compose down
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)