无法让flyway-docker识别卷中的本地文件

问题描述

我正在尝试使用Flyway在Docker容器中设置DB2测试/演示环境。我有一个在docker容器中运行的DB2映像,现在正试图飞速创建数据库环境。我可以连接到DB2 docker容器并创建DB2对象并向其加载数据,但是我正在寻找一种非技术用户方法(例如,克隆GitHub存储库并发出单个docker run命令)。

Flyway Docker站点https://github.com/flyway/flyway-docker)表示它支持以下卷:

| Volume            | Description                                            |
|-------------------|--------------------------------------------------------|
| `/flyway/conf`    | Directory containing a flyway.conf                     |
| `/flyway/drivers` | Directory containing the JDBC driver for your database |
| `/flyway/sql`     | The sql files that you want Flyway to use              |

我创建了confdriverssql目录。在conf目录中,放置了文件flyway.conf,其中包含我的飞行通道网址,用户名密码

flyway.url=jdbc:db2://localhost:50000/apidemo
flyway.user=DB2INST1
flyway.passord=mY%tEst%pAsSwOrD

drivers目录中,添加了DB2 JDBC Type 4驱动程序(例如db2jcc4.jardb2jcc_license_cisuz.jar

sql目录中,我放入了一个简单的表创建语句(文件名:V1__make_temp_table.sql):

CREATE TABLE EDS.REFT_TEMP_DIM (
      TEMP_ID       INTEGER  NOT NULL ),TEMP_CD       CHAR    (8),TEMP_NM       VARCHAR (255)
  )
  DATA CAPTURE NONE 
  COMPRESS NO;

如GitHub run中所述,尝试使用flyway/flyway映像执行docker Readme.md,但由于无法识别flyway.conf文件,因此无法识别docker run --rm -v sql:/flyway/sql -v conf:/flyway/conf -v drivers:/flyway/drivers flyway/flyway migrate Flyway Community Edition 6.5.5 by Redgate ERROR: Unable to connect to the database. Configure the url,user and password! 文件网址,用户密码

docker run --rm -v sql:/flyway/sql -v drivers:/flyway/drivers flyway/flyway -url=jdbc:db2://localhost:50000/apidemo -user=DB2INST1 -password=mY%tEst%pAsSwOrD migrate

ERROR: Unable to instantiate JDBC driver: com.ibm.db2.jcc.DB2Driver => Check whether the jar file is present
Caused by: Unable to instantiate class com.ibm.db2.jcc.DB2Driver : com.ibm.db2.jcc.DB2Driver
Caused by: java.lang.classNotFoundException: com.ibm.db2.jcc.DB2Driver

然后我将url,用户名密码内联,并且找不到JDBC驱动程序。

import xlwings as xw
sht = xw.sheets.active
sht.range(f'$A1:$C5').api.HorizontalAlignment = -4131

因此,我相信是造成此问题的原因是我设置本地文件系统或将本地文件与flyway卷相关联。有人知道我在做什么错吗?

解决方法

您需要提供卷的绝对路径,以便Docker挂载它们。

将相对路径更改为绝对路径可解决卷装入问题。

docker run --rm \
-v /Users/steve/github-ibm/flyway-db-migration/sql:/flyway/sql \
-v /Users/steve/github-ibm/flyway-db-migration/conf:/flyway/conf \
-v /Users/steve/github-ibm/flyway-db-migration/drivers:/flyway/drivers \
flyway/flyway migrate