如何让一个服务等待另一个准备好?
How to make a service wait for another to be ready?
我正在使用带 mysql 数据库的飞路。我将它们用作 docker-compose 中的服务,然后在 testcontainer 的 DockerComposeEnvironment 中使用它。问题是,即使我在 'flyway' 服务中为 MySQL 'db' 添加了 depends_on
键,testcontainer 首先启动 flyway,这导致未应用迁移。
我想知道有没有什么方法可以让flyway容器运行只有在db容器准备好后才可以?
我正在使用这段代码来初始化我的测试docker-compose环境(test_mysql
和flyway_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
但当 运行 在 中时它们失败测试容器 npm 库。所以, 并没有真正解决这个问题。
我已经添加了我用来为我解决这个问题的答案。谢谢!
经过长时间的记录和调试,问题似乎是超时。结果证明我指定的 120000 毫秒不足以启动 MySQL 容器。将超时增加到 150000 毫秒就可以了。
我正在使用带 mysql 数据库的飞路。我将它们用作 docker-compose 中的服务,然后在 testcontainer 的 DockerComposeEnvironment 中使用它。问题是,即使我在 'flyway' 服务中为 MySQL 'db' 添加了 depends_on
键,testcontainer 首先启动 flyway,这导致未应用迁移。
我想知道有没有什么方法可以让flyway容器运行只有在db容器准备好后才可以?
我正在使用这段代码来初始化我的测试docker-compose环境(test_mysql
和flyway_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
但当 运行 在 中时它们失败测试容器 npm 库。所以,
我已经添加了我用来为我解决这个问题的答案。谢谢!
经过长时间的记录和调试,问题似乎是超时。结果证明我指定的 120000 毫秒不足以启动 MySQL 容器。将超时增加到 150000 毫秒就可以了。