Liquibase Docker容器v4.17.0连接Redshift失败求助
问题
使用liquibase/liquibase:v4.17.0 Docker镜像连接Redshift时遇到两类问题:
- 未指定驱动类时,Liquibase无法从JDBC URL自动识别驱动:
Unexpected error running Liquibase: Driver class was not specified and could not be determined from the url (jdbc:redshift://aaaa.aaaa.eu-west-2.redshift.amazonaws.com:dddd:/aaaa).
- 手动添加Redshift驱动JAR和Liquibase Redshift扩展JAR后,无论指定驱动类为
com.amazon.redshift.Driver(驱动JAR内定义)还是com.amazon.redshift.jdbc42.Driver(AWS文档指定),均报错找不到驱动:
Unexpected error running Liquibase: Cannot find database driver: com.amazon.redshift.Driver Unexpected error running Liquibase: Cannot find database driver: com.amazon.redshift.jdbc42.Driver
当前使用的Dockerfile:
FROM liquibase/liquibase:latest COPY entry.sh /entry.sh ADD https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/2.1.0.9/redshift-jdbc42-2.1.0.9.jar lib/redshift-jdbc42-2.1.0.9.jar ADD https://github.com/liquibase/liquibase-redshift/releases/download/v4.17.0/liquibase-redshift-4.17.0.jar lib/liquibase-redshift-4.17.0.jar COPY liquibase.properties liquibase.properties ENTRYPOINT ["/entry.sh"]
容器内执行的命令(已省略敏感信息):
docker-entrypoint.sh --defaultsFile=liquibase.properties --classpath=lib/redshift-jdbc42-2.1.0.9.jar
注:本地Liquibase v4.17.0命令行版本可正常连接Redshift。
解决方案
1. 修正类路径配置
Liquibase Docker镜像需要同时加载Redshift驱动JAR和Liquibase Redshift扩展JAR,只指定驱动JAR会导致扩展无法识别Redshift类型。修改执行命令的--classpath参数,同时包含两个JAR:
docker-entrypoint.sh --defaultsFile=liquibase.properties --classpath=lib/redshift-jdbc42-2.1.0.9.jar:lib/liquibase-redshift-4.17.0.jar
或者直接在liquibase.properties中配置统一类路径:
classpath: lib/redshift-jdbc42-2.1.0.9.jar:lib/liquibase-redshift-4.17.0.jar
2. 匹配驱动类与JAR版本
Redshift JDBC 4.2版本的驱动类通常为com.amazon.redshift.jdbc42.Driver,部分新版本JAR已统一使用com.amazon.redshift.Driver。可以查看驱动JAR内的META-INF/services/java.sql.Driver文件确认正确类名,然后在liquibase.properties中明确指定:
driver: com.amazon.redshift.jdbc42.Driver
3. 调整JAR存放路径到默认扫描目录
Liquibase Docker镜像默认会扫描/liquibase/lib目录下的所有JAR,建议将驱动和扩展JAR复制到该目录,避免自定义路径带来的加载问题:
FROM liquibase/liquibase:v4.17.0 COPY entry.sh /entry.sh # 复制到Liquibase默认扫描的lib目录 ADD https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/2.1.0.9/redshift-jdbc42-2.1.0.9.jar /liquibase/lib/ ADD https://github.com/liquibase/liquibase-redshift/releases/download/v4.17.0/liquibase-redshift-4.17.0.jar /liquibase/lib/ COPY liquibase.properties /liquibase/liquibase.properties ENTRYPOINT ["/entry.sh"]
修改后无需手动指定--classpath,Liquibase会自动加载目录内的JAR。
4. 修正JDBC URL格式
原URL中端口后多了一个冗余斜杠(:dddd:/aaaa),修正为标准格式:
jdbc:redshift://aaaa.aaaa.eu-west-2.redshift.amazonaws.com:dddd/aaaa
内容的提问来源于stack exchange,提问作者aj-ips
相关产品推荐
相关产品推荐

