我想在Oracle中使用Keycloak最新版本(14.0.0) Docker映像,据我所知,Oracle驱动程序中没有提供jboss/keycloak:14.0.0映像。
首先,我将驱动程序添加到适当的目录中,作为文件中的卷。
keycloak:
image: jboss/keycloak:14.0.0
ports:
- 9080:8080
- 9443:8443
networks:
- bifrost
environment:
...
volumes:
- ./jdbc:/opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main/driver
depends_on:
oracle-db:
condition: service_healthy我将文件下载到jdbc目录中,并将jar重命名为ojdbc.jar,这是他们在描述中推荐的。
在我试图将它推送到远程之前,它工作得很好,因为文件大小太大,远程git主机光荣地拒绝了它。我们不能改变这个限制,所以我能找到的最好的解决方案是构建映像,因为ADD命令可以从web获取资源并添加到映像中。
这就是我想出来的:
FROM jboss/keycloak:14.0.0
ADD https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/12.2.0.1/ojdbc8-12.2.0.1.jar /opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main/driver/ojdbc.jar和docker-sompose.yml
keycloak:
build:
context: ./keycloak
ports:
- 9080:8080
- 9443:8443
networks:
- bifrost
environment:
...
depends_on:
oracle-db:
condition: service_healthy但是,如果使用此解决方案,Keycloak无法启动,则始终会出现以下错误:
11:54:39,493启动时的致命org.keycloak.services错误: java.lang.RuntimeException:连接数据库失败
因此,Keycloak应用程序的行为就像没有Oracle JDBC驱动程序一样,当我像以前一样将驱动程序添加回卷时,它就工作得很好。
我完全不知道为什么会发生这种情况,这两种情况有什么不同?
据我所知,这两种情况都不应该有任何不同,而且应该工作得很好。
jdbc dir中的jar与我在Dockerfile中添加的jar完全相同
发布于 2021-07-20 16:19:26
我猜:
https://docs.docker.com/engine/reference/builder/#add
如果
是远程文件URL,则目标的权限为600。
测试:
$ ls -lah /opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main/driver/ojdbc.jar
-rw------- 1 root root 3.9M Feb 21 2020 /opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main/driver/ojdbc.jar来自官方Docker映像的密钥披风在用户ID 1000下运行,而不是在root用户下运行。因此,Keycloak无法看到下载的驱动程序,而Keycloak应用程序的行为就像没有Oracle JDBC驱动程序一样。这是不同的。对驱动程序文件的权限。
https://stackoverflow.com/questions/68454840
复制相似问题