我试图弄清楚如何以及何时从部署在 Docker Swarm 中的 Docker 容器运行 mybatis 模式迁移。我的意思是:我需要最正确的方法来做到这一点。
目前我们从 Dockerfile 构建一个 Docker 容器
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y \
openjdk-11-jre \
openjdk-11-jdk \
maven
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
COPY start.sh start.sh
RUN chmod +x start.sh
ENTRYPOINT ["/bin/sh","start.sh"]
然后 start.sh 脚本包含
mvn resources:resources migration:up -Dmigration.path="target/classes/migrations" -Dmigration.env=development -Papply_migrations
java -jar /app.jar
但是通过这种方式,我们必须从 Ubuntu 构建一个映像,安装 Maven 并将环境“硬编码”到 start.sh 文件中的迁移午餐,所以我们需要来自不同环境的不同文件。
您认为在构建/部署过程中运行这些方案迁移的最正确方法是什么?
提前致谢。
编辑:我发现使用在 DockerHub 上找到并由@h3adache 发布的 mybatis 迁移 docker 映像的解决方案很有用,但仍然有一个问题试图在 DockerSwarm 上执行它:该问题与安装在主机文件夹之间的卷有关带有 mybatis 迁移文件和容器文件夹“/migration”
-v $PWD:/migration
我的 docker-compose.yml 是
mybatis-migration:
image: mybatis/migrations
volumes:
- ./mybatis-migrations:/migration
command:
- up
它在本地对 dockerized MySQL 运行良好,但在使用 GitLab 管道部署期间失败。
显然,当我签出代码时,该./mybatis-migrations
文件夹位于我的本地主机上,并且当 GitLab 运行程序构建所有内容但不在 DockerSwarm 主机上时,它位于 GitLab 存储库的构建路径中,因此无法找到该目录。
这是错误消息:
“绑定”类型的挂载配置无效:绑定源路径不存在
我怎样才能解决这个问题?