如何在 docker-compose.yml 中开始测试之前等待数据库迁移完成

Posted

技术标签:

【中文标题】如何在 docker-compose.yml 中开始测试之前等待数据库迁移完成【英文标题】:How to wait for database migrations to complete before starting tests in docker-compose.yml 【发布时间】:2019-06-05 12:29:00 【问题描述】:

在 docker-compose.yml 文件中,我有 3 个服务。第一个服务用于启动 mysql 数据库。第二个服务用于运行多个数据库迁移,以在第一个服务中创建的 MySQL 数据库中创建表和种子数据。第三个服务用于运行一些需要 MySQL 数据库的 node.js 单元测试。问题是我需要在数据库迁移完成后才开始单元测试。但是我没有办法知道。

我曾尝试在单元测试服务中使用 depends_on 配置选项使其依赖于数据库迁移服务,但根据 Docker 文档,depends_on 仅保证单元测试服务在数据库迁移服务启动后启动。

【问题讨论】:

【参考方案1】:

depends_on 选项仅允许您控制启动顺序。 为了检查准备情况,您必须以编程方式检查它。您可以编写一个包装脚本来检查您的迁移是否完成,也可以使用现有工具,例如wait-for-it

您可以在official documentation找到更多信息

【讨论】:

嗨,马克,感谢您的评论。但是迁移服务的问题是我没有可以固定的端口来检查它是否准备好,因为它只使用在第一个服务中设置的 MySQL 数据库。使用 wait-for-it 只能让我知道数据库是否准备就绪,但我无法知道数据库迁移是否完成。 不能通过执行SQL脚本来检查吗? 嗨,Marc,是的,我认为这是一个解决方案。但一个缺点是每次添加新迁移时都需要更新脚本。我只是想知道是否有一种方法可以避免这种情况。 您不能在应用程序启动时运行您的迁移脚本吗?例如,在 Java 中,有一些库允许您在应用程序启动时运行 SQL 迁移脚本(请参阅 flyway 或 liquibase )

以上是关于如何在 docker-compose.yml 中开始测试之前等待数据库迁移完成的主要内容,如果未能解决你的问题,请参考以下文章

如何正确组合这个 docker-compose.yml?

如何在 docker-compose.yml 中开始测试之前等待数据库迁移完成

如何验证我的 docker-compose.yml?

如何在 AWS Elastic Container Service 中使用现有的 docker-compose.yml 文件?

如何在主机上为 docker-compose.yml 中的命名卷设置路径

如何将docker-compose.yml转换为Dockerfile