Keycloak 17.0.0 Docker镜像无法找到适合Postgres的驱动程序。

10

我正在运行docker桌面版(Windows),并按照此处的说明构建keycloak 17.0.0的docker镜像。构建成功,但在桌面版中运行该镜像时出现错误:

ERROR [org.key.qua.run.cli.ExecutionExceptionHandler] (main) ERROR: Failed to obtain JDBC connection

ERROR [org.key.qua.run.cli.ExecutionExceptionHandler] (main) ERROR: No suitable driver found for jdbc:postgresql://postgres/keycloak

postgres已经在docker桌面版上以默认端口5432和名称“postgres”运行,并创建了keyclock数据库。

以下是我的Dockerfile:

FROM quay.io/keycloak/keycloak-x:latest as builder

ENV KC_METRICS_ENABLED=true
ENV KC_FEATURES=token-exchange
ENV KC_DB=postgres
RUN /opt/keycloak/bin/kc.sh build

FROM quay.io/keycloak/keycloak-x:latest
COPY --from=builder /opt/keycloak/lib/quarkus/ /opt/keycloak/lib/quarkus/
WORKDIR /opt/keycloak

RUN keytool -genkeypair -storepass password -storetype PKCS12 -keyalg RSA -keysize 2048 -dname "CN=server" -alias server -ext "SAN:c=DNS:localhost,IP:127.0.0.1" -keystore conf/server.keystore

ENV KEYCLOAK_ADMIN=admin
ENV KEYCLOAK_ADMIN_PASSWORD=admin

ENV KC_DB_URL='jdbc:postgresql://postgres/keycloak'
ENV KC_DB_USERNAME=postgres
ENV KC_DB_PASSWORD=postgres

ENV KC_HOSTNAME=localhost:8443
ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start"]

从文档中了解到,设置"KC_DB=postgres"后,构建应该包含似乎缺失的postgres驱动程序。

可以有人告诉我这里有什么问题吗?谢谢。


这个回答解决了你的问题吗?找不到适合的驱动程序'jdbc:mysql://localhost:3306/mysql - rzlvmp
1
不,那个问题是关于Java编码的,而我正在询问有关Keycloak Docker镜像配置的问题。 - WSK
3个回答

4
我猜 KC_DB 是一个运行时配置。请参见构建帮助:
# ./kc.sh build -h
...
  Change database settings:

      $ kc.sh build --db=postgres [--db-url][--db-username][--db-password]
...

因此,应该构建参数--db=postgres

顺便说一下:我将使用quay.io/keycloak/keycloak:17.0.0镜像(17.0.0是第一个基于 Quarkus 的稳定版 Keycloak 发布)。


谢谢@jan Garaj,我会尝试一下,但是我发布的代码是从他们自己的文档中获取的,应该不会有错。不过使用17.0.0版本确实是个好建议。 - WSK
通过切换到稳定版本17.0.0解决了我的问题,我的代码没有任何问题。吸取了教训,感谢您的帮助。 - WSK

4

正如Jan Garajomufeed已经指出的那样,这是一个运行时配置。因此,示例Dockerfile是错误的。将ENV KC_DB=postgres移动到第二个FROM部分,使其看起来像:

[...]
ENV KC_DB_URL='jdbc:postgresql://postgres/keycloak'
ENV KC_DB_USERNAME=postgres
ENV KC_DB_PASSWORD=postgres
ENV KC_DB=postgres // HERE IT GOES
[...]

所以您不需要修改 ENTRYPOINT,也可以在 Docker Compose 文件中提供这些环境变量。

3

我曾经苦恼于这个问题。正如Jan Garaj所提到的那样,--db=postgres是一个运行时配置。因此,将ENTRYPOINT更改为以下内容解决了我的问题:

ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start-dev", "--db=postgres"]

如果需要在生产环境中运行,请使用"start"命令:

ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start", "--auto-build", "--db=postgres"]

值得一提的是,相同的Dockerfile也适用于quay.io/keycloak/keycloak:latest。我已经切换了镜像,并发现与keycloak-x相比,keycloak更加稳定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接