【发布时间】:2021-10-27 16:42:47
【问题描述】:
我正在使用带有 mysql 数据库的 flyway。我在 docker-compose 中将它们用作服务,然后在 testcontainer 的 DockerComposeEnvironment 中使用它。问题是,即使我在 MySQL 'db' 的'flyway' 服务中添加了 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 运行,但在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