Ich möchte das Docker-Image der neuesten Version von Keycloak (14.0.0) mit Oracle JDBC verwenden, und soweit ich weiß, wird das jboss/keycloak:14.0.0
Image nicht mit dem Oracle JDBC-Treiber geliefert .
Zuerst habe ich den Treiber dem richtigen Verzeichnis als Volume in einer docker-compose-Datei hinzugefügt.
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
Ich habe die Datei in das jdbc
Verzeichnis heruntergeladen und das jar umbenannt, ojdbc.jar
wie sie es in ihrer Beschreibung empfehlen.
Es hat gut funktioniert, bis ich versucht habe, es auf Remote zu verschieben, was vom Remote-Git-Host glorreich abgelehnt wird, weil die Dateigröße zu groß ist. Wir können dieses Limit nicht ändern, daher ist die beste Lösung, die ich finden kann, das Image zu erstellen, da der ADD
Befehl Ressourcen aus dem Web abrufen und zum Image hinzufügen kann
Also mir fällt folgendes ein:
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
und die docker-sompose.yml
:
keycloak:
build:
context: ./keycloak
ports:
- 9080:8080
- 9443:8443
networks:
- bifrost
environment:
...
depends_on:
oracle-db:
condition: service_healthy
Mit dieser Lösung konnte Keycloak jedoch nicht gestartet werden, es schlägt immer mit folgendem Fehler fehl
11:54:39,493 FATAL [org.keycloak.services] (ServerService Thread Pool -- 70) Fehler beim Start: java.lang.RuntimeException: Verbindung zur Datenbank fehlgeschlagen
Die Keycloak-Anwendung verhält sich also so, als wäre kein Oracle JDBC-Treiber vorhanden, sobald ich den Treiber wie zuvor als Volume wieder hinzufüge, funktioniert es einwandfrei.
Ich habe absolut keine Ahnung, warum das passiert, was ist der Unterschied zwischen den beiden Szenarien?
Nach meinem Wissen sollte es keinen Unterschied geben und sollte in beiden Fällen gut funktionieren.
Das Glas im jdbc
Verzeichnis ist genau das gleiche, wie ich es im Dockerfile hinzufüge
Meine Vermutung:
https://docs.docker.com/engine/reference/builder/#add
Wenn <src> eine Remote-Datei-URL ist, hat das Ziel Berechtigungen von 600.
Prüfen:
$ 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
Keycloak von offiziellen Docker-Images wird unter der Benutzer-ID ausgeführt 1000
, nicht unter dem root
Benutzer. Keycloak kann also den heruntergeladenen Treiber nicht sehen und die Keycloak-Anwendung verhält sich, als wäre kein Oracle JDBC-Treiber vorhanden. Das ist ein Unterschied. Berechtigungen für die Treiberdatei.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen