反对Dockerized Postgresql的Liquibase回滚?

时间:2018-12-08 16:38:57

标签: postgresql docker liquibase

拥有Dockerized Spring-Boot应用程序和PostgreSQL数据库, 我该如何发出cmd

mvn liquibase:rollback -Dliquibase.rollbackCount=4 -Dliquibase.password=*********

或任何等价物, 针对数据库? 请注意,我所有的changelongs都在Spring-Boot项目的resource文件夹中,并且我能够从项目的根目录运行上述CMD。

这是 Spring-Boot应用程序 dockerfile

FROM openjdk:8-jre-alpine

ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
    JAVA_OPTS=""

CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.war

EXPOSE 8080 5701/udp

ADD *.war /app.war

这是docker-compose中的PostgreSQL服务:

app-postgresql:
    image: postgres:9.6.5
    mem_limit: 256m
    environment:
        - POSTGRES_USER=${DB_USER}
        - POSTGRES_PASSWORD=${DB_PWD}

我能够登录到应用容器,但是由于所有内容都打包在app.war中,因此没有安装changelog文件或maven或liquibase

更新

我当时正在考虑对dockerized数据库进行备份,在本地还原它,然后从项目的根目录运行rollback命令。 最后,我将备份本地数据库并将其还原到容器上。

这可能是最简单的方法。但是,我希望有一种替代方法,而无需移动和还原数据库。

2 个答案:

答案 0 :(得分:1)

您可以对WAR文件运行迁移。搜索更多here“运行迁移器从.WAR文件中提取变更日志”。因此,如果您能够在容器内执行命令,那么您也应该能够执行liquibase。

答案 1 :(得分:0)

我是按照我的“奇怪”想法来做的。

首先,我对dockerized数据库进行了备份, 然后将其还原到本地数据库。

在本地,我能够运行rollback命令,并进行了必需的更新。

最后,我将其还原到了dockerized数据库上。

我希望如果有人遇到同样的麻烦也能有所帮助。