Docker运行Liquibase update报错:指定文件未在搜索路径中找到
解决方案
问题原因
Liquibase 默认的文件搜索路径不包含你挂载的 /db 目录,即使文件已映射到容器内,也无法被识别到。以下是几种可行的修复方案:
方案一:将卷映射到Liquibase默认搜索路径
把本地的 db 目录直接挂载到 Liquibase 默认会搜索的 /liquibase/changelog 路径下,无需额外配置搜索路径:
docker run --rm --network host -v /home/richardmarais/Development/IdeaProjects/travellinck-javaee/corporateInterface/src/main/resources/db:/liquibase/changelog \ liquibase/liquibase update \ --changelog-file=local/changelog-local-master.xml \ --url="jdbc:postgresql://localhost:5431/pims" \ --username=postgres \ --password=password
这里 --changelog-file 使用相对路径即可,因为 /liquibase/changelog 是Liquibase默认搜索路径之一。
方案二:添加搜索路径参数
保留原卷映射,通过 --search-path 参数将 /db 加入Liquibase的搜索范围:
docker run --rm --network host -v /home/richardmarais/Development/IdeaProjects/travellinck-javaee/corporateInterface/src/main/resources/db:/db \ liquibase/liquibase update \ --changelog-file=local/changelog-local-master.xml \ --search-path=/db \ --url="jdbc:postgresql://localhost:5431/pims" \ --username=postgres \ --password=password
此时 --changelog-file 可以用相对路径(基于 /db),也可以继续使用绝对路径 /db/local/changelog-local-master.xml。
方案三:先验证卷挂载是否正常
如果上述方案仍无效,先排查挂载是否成功或存在权限问题:
docker run --rm -v /home/richardmarais/Development/IdeaProjects/travellinck-javaee/corporateInterface/src/main/resources/db:/db ubuntu ls -l /db/local/
- 如果能看到
changelog-local-master.xml文件,说明挂载正常; - 如果看不到,检查本地路径拼写是否正确,或给本地文件添加读权限:
chmod +r /home/richardmarais/Development/IdeaProjects/travellinck-javaee/corporateInterface/src/main/resources/db/local/changelog-local-master.xml
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

