当前位置: 首页 > 知识库问答 >
问题:

Liquibase通过Docker-Changelog不写入磁盘

鲁浩言
2023-03-14

按照建议,我在我的 中创建了一个liquibase.docker.properties文件

classpath: /liquibase/changelog
url: jdbc:postgresql://localhost:5432/mydb?currentSchema=public
changeLogFile: changelog.xml
username: myuser
password: mypass

要能够运行Docker,请运行--rm--net=“host”-v ://liquibase/CHANGELOG liquibase/liquibase--defaultsfile=/liquibase/CHANGELOG/liquibase.docker.properties

当我运行[...]时GenerateChangelog,我得到以下输出(使用选项--loglevel info):

[2021-04-27 06:08:20] INFO [liquibase.integration] No Liquibase Pro license key supplied. Please set liquibaseProLicenseKey on command line or in liquibase.properties to use Liquibase Pro features.
Liquibase Community 4.3.3 by Datical
####################################################
##   _     _             _ _                      ##
##  | |   (_)           (_) |                     ##
##  | |    _  __ _ _   _ _| |__   __ _ ___  ___   ##
##  | |   | |/ _` | | | | | '_ \ / _` / __|/ _ \  ##
##  | |___| | (_| | |_| | | |_) | (_| \__ \  __/  ##
##  \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___|  ##
##              | |                               ##
##              |_|                               ##
##                                                ## 
##  Get documentation at docs.liquibase.com       ##
##  Get certified courses at learn.liquibase.com  ## 
##  Free schema change activity reports at        ##
##      https://hub.liquibase.com                 ##
##                                                ##
####################################################
Starting Liquibase at 06:08:20 (version 4.3.3 #52 built at 2021-04-12 17:08+0000)
BEST PRACTICE: The changelog generated by diffChangeLog/generateChangeLog should be inspected for correctness and completeness before being deployed.
[2021-04-27 06:08:22] INFO [liquibase.diff] changeSets count: 1
[2021-04-27 06:08:22] INFO [liquibase.diff] changelog.xml does not exist, creating and adding 1 changesets.
Liquibase command 'generateChangeLog' was executed successfully.

看起来该命令运行“成功”,但在我挂载的本地目录中找不到文件CHANGELOG.xml,即 。然而,挂载必须工作,因为它成功地连接到数据库,即容器能够访问和读取liquibase.docker.properties

首先,我认为我可能必须“告诉”Docker允许在我的磁盘上写入,但似乎应该支持这一点[从Docker Hub上的描述来看]:

/liquibase/changelog卷还可用于写入输出的命令,如generateChangeLog

附加信息

Docker Inspect的输出:

"Mounts": [
    {
        "Type": "bind",
        "Source": "<PATH TO CHANGELOG DIR>",
        "Destination": "/liquibase/changelog",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    },
    ...
],

共有1个答案

朱鹏
2023-03-14

当您运行GenerateChangelog时,文件的路径应该指定为/liquibase/changelog/changelog.xml,即使对于Update,也应该指定为changelog.xml

示例:

docker run --rm --net="host" -v <PATH TO CHANGELOG DIR>:/liquibase/changelog liquibase/liquibase --defaultsFile=/liquibase/changelog/liquibase.docker.properties --changeLogFile=/liquibase/changelog/changelog.xml generateChangeLog

对于GenerateChangelog,changeLogFile参数是要输出的文件的特定路径,而相对于更新和其他命令使用的类路径设置的路径。

详细信息

创建文件的操作和读取现有文件的操作是有区别的。

对于Liquibase,您几乎总是希望使用与类路径中的目录相关的文件路径,就像下面的示例一样。指定的changelogFile存储在跟踪系统中,因此如果您曾经运行相同的changelog,但以不同的方式引用(因为您移动了根目录或正在不同的机器上运行),那么Liquibase将把它视为一个新文件,并尝试重新运行已经运行的变更集。

 类似资料:
  • 我在spring Boot2应用程序中有以下错误: 由:liquiBase.exception.changeLogParseException引起:读取迁移文件时出错:无法将类路径资源[src/main/resources/changeLogs/changeLog-1.0.xml]解析为URL,因为它不存在于liquiBase.parser.core.xml.xmlChangeLogsaxPars

  • 在我的应用程序中,我可能需要运行多个Changelog文件,但我无法执行这样的执行, 我尝试按以下方式提供多个Changelog, LiquiBase.SetChangeLog(“classpath:schema/update-schema-01.sql”); LiquiBase.SetChangeLog(“classpath:schema/update-schema-02.sql”); 请在这里

  • 我在SpringBoot中使用liquiBase 3.8.0。我的changelog文件树如下所示: 我尝试使用上下文,但发现了奇怪的行为--如果我在changelog-master.xml或changelog-test.xml中使用上下文,就像这样(父级changelog文件): 之后,contexts列将填充“!prod AND test” 我希望contexts列始终是填充的(如果我在父ch

  • 解决这种迁移的合适方法是什么?扔掉changelog历史记录,使用修改后的changelog从头重新构建架构,然后迁移数据?有更好的方法吗?

  • 我正在将一个庞大的基于Spring Boot1.x的项目升级到Spring Boot2.2。旧版本使用的是LiquiBase3.5,当前的升级分支使用的是LiquiBase3.8。 主changelog文件具有以下结构: LiquiBase的属性读取系统在3.5和3.8之间有变化吗? 作为变通方法,我使用这里定义的方法:https://reflectoring.io/database-migrat

  • 通过Scala spark-shell,我可以使用ElasticSearch-Hadoop-5.5.0连接器访问Elasticsearch db。 是否有一种方法可以增量地导出数据(例如,一次100k条记录),这样我就不会使系统内存过载?