【问题标题】:How to make a service wait for another to be ready?如何让服务等待另一个服务准备好?
【发布时间】:2021-10-27 16:42:47
【问题描述】:

我正在使用带有 mysql 数据库的 flyway。我在 docker-compose 中将它们用作服务,然后在 testcontainer 的 DockerComposeEnvironment 中使用它。问题是,即使我在 MySQL 'db' 的'flyway' 服务中添加了 depends_on 键,testcontainer 还是首先启动 flyway,这导致迁移不被应用。

我想知道是否有一种方法可以使flyway容器仅在db容器准备好时才运行?

我正在使用这段代码来初始化我的测试 docker-compose 环境(test_mysqlflyway_c 是服务容器的名称):

const environment = await new DockerComposeEnvironment(composeFilePath, composeFile)
        .withWaitStrategy('test_mysql', Wait.forLogMessage(`ready for connections. Bind-address: '::' port:`))
        .withWaitStrategy('flyway_c', Wait.forLogMessage(`Successfully applied`))
        .withStartupTimeout(120000)
        .up();

这是我的 docker-compose 文件:

version: '3'
services:
  db:
    image: mysql:8.0.26
    environment:
      - MYSQL_DATABASE=test_db
      - MYSQL_ROOT_PASSWORD=pass
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
    ports:
      - '3306:3306'
      - '33060:33060'
    expose:
      - '3306'
    container_name: test_mysql
  flyway:
    image: flyway/flyway
    command: -url=jdbc:mysql://db -schemas=test_db -user=root -password=pass -connectRetries=100 migrate
    volumes:
      - .:/flyway/sql
    depends_on:
      - db
    container_name: flyway_c

任何帮助将不胜感激。谢谢!

编辑

这个问题不是由 docker-compose 引起的。换句话说,服务flyway 确实会等待db,如果它们以docker-compose up 运行,但在testcontainers npm 库中运行时会失败。所以,Docker Compose wait for container X before starting Y 并没有真正解决这个问题。

我已经添加了我用来为我解决这个问题的答案。谢谢!

【问题讨论】:

  • 您可以为您的flyway 服务创建一个entrypoint.sh 并在此处使用此技术:stackoverflow.com/a/29793382/9835872
  • 谢谢你们俩。这些是非常有用的链接,帮助我调试出了什么问题。我继续前进而没有覆盖端点。然而,真正的问题原来是别的东西。这是超时。将其增加到 150000 可以让测试正常运行。

标签: mysql node.js docker-compose flyway testcontainers


【解决方案1】:

经过长时间的日志记录和调试,问题似乎是超时。事实证明,我指定的 120000 毫秒不足以启动 MySQL 容器。将超时时间增加到 150000 毫秒就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2018-12-03
    • 1970-01-01
    • 2015-12-17
    • 2019-03-15
    相关资源
    最近更新 更多