Keycloak 17.0.0 docker 镜像找不到合适的驱动程序



我正在运行docker桌面(windows(,并按照此处的说明为keycloft 17.0.0构建docker映像。构建成功完成,但当我在桌面上运行此映像时,我收到错误

ERROR[org.key.qua.run.cli.ExecutionExceptionHandler](main(错误:无法获取JDBC连接

错误[org.key.qua.run.cli.ExecutionExceptionHandler](main(错误:否为jdbc:p找到合适的驱动程序ostgresql://postgres/keycloak

postgres已经在docker桌面上运行,名称为";postgres";在默认端口5432上,并已创建密钥时钟数据库。

这是我的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驱动程序。

有人能告诉我这里出了什么问题吗?谢谢

我猜KC_DB是一个运行时配置。请参阅构建帮助:

# ./kc.sh build -h
...
Change database settings:
$ kc.sh build --db=postgres [--db-url][--db-username][--db-password]
...

所以它应该是构建参数--db=postgres

BTW:我会使用quay.io/keycloak/keycloak:17.0.0图像(17.0.0是第一个稳定的基于Quarkus的Keycloft版本(。

正如Jan Garaj和omufeed所说,这是一个运行时配置。所以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文件中提供这些环境变量。

我与这个问题斗争了一段时间。正如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。我切换了图像,发现keycloakkeycloak-x更稳定。