在 docker 容器上运行数据库时,Flyway 找不到迁移
Posted
技术标签:
【中文标题】在 docker 容器上运行数据库时,Flyway 找不到迁移【英文标题】:Flyway can't find migrations when database is run on docker container 【发布时间】:2021-05-23 14:50:28 【问题描述】:我一直在关注 this tutorial 尝试使用 flyway 迁移脚本设置数据库。本教程的唯一区别是我一直在尝试在 Spring Boot 应用程序中使用它。出于某种原因,当我运行“docker-compose up”时,我的终端中总是会出现以下日志。
flyway_1 | Flyway 社区版 7.5.3 由 Redgate flyway_1 | 数据库:jdbc:postgresql://postgres:5432/db-name (PostgreSQL 12.2) flyway_1 |成功验证 0 个迁移(执行时间 00:00.041s) flyway_1 |警告:未找到迁移。是你的 位置设置正确? flyway_1 |当前版本的架构 "public": > flyway_1 |架构“公共”取决于 日期。无需迁移。
但是,我在 src/main/resources/db/migration 下有一个迁移脚本。我不确定为什么它无法找到它,因为它似乎是默认情况下应该寻找它们的地方。
这是我的 docker-compose.yml 文件
version: '3'
services:
flyway:
image: flyway/flyway:7.5.3
command: -configFiles=/flyway/conf/flyway.config -locations=filesystem:/flyway/sql -connectRetries=60 migrate
volumes:
- $PWD/src/main/java/resources/db/migration
- $PWD/docker-flyway.config:/flyway/conf/flyway.config
depends_on:
- postgres
postgres:
image: postgres:12.2
restart: always
ports:
- "5432:5432"
environment:
- POSTGRES_USER=example-username
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=db-name
这是我的 docker-flyway.config 文件。
flyway.url=jdbc:postgresql://postgres:5432/db-name
flyway.user=example-username
flyway.password=pass
flyway.baselineOnMigrate=false
【问题讨论】:
【参考方案1】:Flyway 文件需要具有 .sql 扩展名。此处提及:https://flywaydb.org/documentation/concepts/migrations#naming
【讨论】:
我尝试添加该扩展程序,但不幸的是,我仍然在我的终端上登录。【参考方案2】:我意识到我的 docker-compose.yml 文件中有一个卷映射写错了。我并不完全理解映射本身,但是在复制了 this post 中的内容后,它正确地运行了迁移脚本。
【讨论】:
以上是关于在 docker 容器上运行数据库时,Flyway 找不到迁移的主要内容,如果未能解决你的问题,请参考以下文章
使用 Flyway 和 Docker 容器内的嵌入式 Postgresql 运行测试时出现 java.net.ConnectException
无法将docker Spring-Boot应用程序与docker-compose中的mysql容器和flyway连接起来