2017-06-27 2 views
7

J'ai créé petite application Wildfly Swarm avec KeyCloak serveur à l'aide WildFly Swarm Project Generator j'ai ajouté un code, construit et commencé mon pot de graisse à l'aide:Courir wildfly Swarm avec KeyCloak sur l'image docker

java -jar -Dswarm.port.offset=100 login-service-swarm.jar 

Après application contempla j'ai créé nouveau royaume ajouté des utilisateurs etc. Puis j'ai remarqué que keycloak a créé 3 fichiers dans mes dossiers cibles. Ces fichiers où:

  • keycloak.h2.db
  • keycloak.lock.db
  • keycloak.trace.db

Puis j'ai décidé de créer des images de docker et l'exécuter dans docker locale environnement. Donc, j'ai créé le fichier docker:

FROM java:openjdk-8-jdk 
ADD login-service-swarm.jar /opt/login-service-swarm.jar 
ADD keycloak.h2.db /opt/keycloak.h2.db 
ADD keycloak.lock.db /opt/keycloak.lock.db 
ADD keycloak.trace.db /opt/keycloak.trace.db 

EXPOSE 8180 
ENTRYPOINT ["java", "-jar", "-Dswarm.port.offset=100", "/opt/login-service-swarm.jar"] 

image intégré en utilisant:

docker build -f Dockerfile -t login-service-swarm-v1 . 

Et l'image est visible dans mon image docker liste:

C:\Work\Java\login-service\docker>docker images 
REPOSITORY     TAG     IMAGE ID   CREATED    SIZE 
login-service-swarm-v1  latest    710cddc59623  About a minute ago 790 MB 
<none>      <none>    100c0ee60f25  3 hours ago   779 MB 
demo       latest    03d12d49ba5e  4 hours ago   760 MB 
java       openjdk-8-jdk  d23bdf5b1b1b  5 months ago   643 MB 

Alors je l'ai commencé en utilisant:

docker run -p 8180:8180 login-service-swarm-v1 

Et il regardait ok mais quand je vais à localhost: 8180/auth et essayez de vous connecter je me trompe de nom d'utilisateur et de mot de passe, donc je ne peux pas me connecter à keycloak. Alors je me demande pourquoi est-ce? Parce que j'ai manuayl inclus fichiers de base de données keycloak dans l'image docker et si je cours les commandes suivantes, vous pouvez voir tous les fichiers sont là comme prévu.

PS C:\> docker ps 
CONTAINER ID  IMAGE      COMMAND     CREATED    STATUS    PORTS     NAMES 
8bb4bdb3945e  login-service-swarm-v1  "java -jar -Dswarm..." 2 minutes ago  Up 2 minutes  0.0.0.0:8180->8180/tcp blissful_knuth 
PS C:\> docker exec -it 8bb4bdb3945e bash 
[email protected]:/# ls 
bin boot dev etc home keycloak.h2.db keycloak.lock.db keycloak.trace.db lib lib64 media mnt opt proc root run sbin srv sys tmp usr var 
[email protected]:/# cd opt 
[email protected]:/opt# ls 
keycloak.h2.db keycloak.lock.db keycloak.trace.db login-service-swarm.jar 

Alors, où est la prise ??

+0

L'essaim de service de connexion est-il conçu pour être un serveur Keycloak ou un microservice sécurisé par Keycloak? Ce n'est pas tout à fait clair pour moi en ce moment – Ken

+0

@Ken: login-service-swarm est un serveur Keycloak – Kiki

Répondre

5

Il semble que le serveur Swarm Keycloak lit le fichier keycloak * .db dans le dossier java exécuté (signifie user.dir) par défaut. Le processus swarm dans le conteneur ne lit pas /opt/keycloak*.db car java s'exécute sur /.

Vous pouvez modifier le répertoire de données avec wildfly.swarm.keycloak.server.db sysprop. https://github.com/wildfly-swarm/wildfly-swarm/blob/2017.6.1/fractions/keycloak-server/src/main/java/org/wildfly/swarm/keycloak/server/runtime/KeycloakDatasourceCustomizer.java#L52

Faites un essai dans Dockerfile;

ENTRYPOINT ["java", "-jar", "/opt/login-service-swarm.jar", "-Dwildfly.swarm.keycloak.server.db=/opt/keycloak"] 

Ou, vous pouvez également utiliser l'option -w avec docker run.

$ docker run --help 
-w, --workdir string    Working directory inside the container 

La commande suivante est supposée fonctionner également.

docker run -p 8180:8180 -w /opt login-service-swarm-v1 

post-scriptum

Je recommande d'utiliser Volume ou Volume Container au lieu d'ajouter les fichiers de données dans Dockerfile.

+0

Travailler comme un charme. Merci! – Kiki

+0

Nice stuff emag, merci! – Ken