从 docker-compose 使用时,flyway 不接受迁移
Posted
技术标签:
【中文标题】从 docker-compose 使用时,flyway 不接受迁移【英文标题】:flyway not picking up migrations when used from docker-compose 【发布时间】:2020-09-26 08:41:45 【问题描述】:我的 docker-compose.yml 文件中有以下服务:
flyway:
image: boxfuse/flyway:latest-alpine
command: -url=jdbc:postgresql://yurldb:5432/yurldb -schemas=public -user=postgres -password=somepassword migrate
networks:
- yunet
volumes:
- ./flyway:/flyway/sql
restart: on-failure
depends_on:
- yurldb
我的资源包中只有一个迁移:
当我使用 docker compose (docker-compose up -d --build flyway) 运行服务时 flyway 创建 flyway_schema_history 表,但不创建迁移中定义的表。如果我检查日志,我会看到此消息:
Boxfuse 数据库的 Flyway 社区版 5.2.4: jdbc:postgresql://yurldb:5432/yurldb (PostgreSQL 10.13) 成功 已验证 0 个迁移(执行时间 00:00.011s)的当前版本 schema "public": > Schema "public" 是最新的。不 需要迁移。
未触发迁移。这是为什么?我不确定我错过了什么。我在正确的包中进行了迁移,并且里面的 SQL 也是正确的(否则会出现某种语法错误)。它只是没有检测到这种迁移。有什么想法吗?
更新 我刚刚注意到,当我运行该命令时,会在包结构中创建一个小目录。不知道是什么:
我还添加了另一张图片来展示项目的整体结构:
更新 2
使用卷映射./src/main/resources/db.migration:/flyway/sql
在我的包结构中生成了一个附加目录:
【问题讨论】:
映射./flyway
和resource catalog
是什么样子的?
@ŁukaszOlszewski 我不确定我是否完全理解你的问题,但我刚刚写了一个更新。当我运行 docker compose 时会创建一个小目录。它有一个灰色的小符号(不确定它的含义)。另外我不确定资源目录是什么。你能给我解释一下吗?
你需要映射resource catalog
做docker容器。在你的 docker compose 文件中试试这个./src/main/resource /db.migration:/flyway/sql
。
@ŁukaszOlszewski 您刚刚发送的内容有误吗?我尝试了./src/main/resources/db.migration:/flyway/sql
,但没有成功还注意到在资源下创建了一个带有灰色符号的新符号(我添加了一张图片)
是的,尝试在路径末尾添加/
。例如。 ./src/main/resources/db.migration/:/flyway/sql/
【参考方案1】:
将您的映射更改为./src/main/resources/db/migration:/flyway/sql
使用 db.migration
会导致 Docker 使用该名称创建,如果 db 目录中只有目录,Intellij 只会显示目录 db/migration
就像包名称 db.dmigration
。
【讨论】:
没错,我忘了 db.migration 实际上是另一个目录中的一个目录。我试过./src/main/resources/db/migration/:/flyway/sql/
,它奏效了。谢谢以上是关于从 docker-compose 使用时,flyway 不接受迁移的主要内容,如果未能解决你的问题,请参考以下文章
使用 docker-compose 在 Windows 上构建气流时出错
使用docker-compose时无法访问docker容器内的spring-boot rest-endpoint
如何从docker-compose获取docker生成的ip端口