在docker图像上运行具有KeyCloak的Wild Sw群

我使用WildFly Swarm项目生成器创build了具有KeyCloak服务器的小型Wildfly Swarm应用程序我添加了一些代码,使用下面的代码构build并启动了我的胖jar:

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

应用程序盯着我创build新领域添加用户等,然后我注意到keycloak在我的目标文件夹中创build3个文件。 那些文件在哪里:

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

然后,我决定创builddocker图像,并在本地docker环境中运行它。 所以我创build了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"] 

build立图像使用:

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

图片在我的docker图片列表中可见:

  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 

所以我开始使用它:

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

它盯着确定,但是当我去localhost:8180 / auth并尝试login我得到错误的用户名和密码消息,所以我无法loginkeycloak。 所以我想知道这是为什么? 因为我manuayl在docker图像中包含keycloak数据库文件,如果我运行以下命令,您可以看到所有文件都按预期方式出现。

 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 root@8bb4bdb3945e:/# 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 root@8bb4bdb3945e:/# cd opt root@8bb4bdb3945e:/opt# ls keycloak.h2.db keycloak.lock.db keycloak.trace.db login-service-swarm.jar 

那么赶上哪里?

它看起来像Swarm Keycloak服务器在默认情况下读取dir执行的java(表示user.dir )中的keycloak * .db。 容器中的swarm进程不会读取/opt/keycloak*.db,因为java在/运行。

您可以使用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

请在Dockerfile中尝试一下;

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

或者,您也可以使用docker run -w选项。

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

下面的命令应该也可以。

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

PS

我build议使用Volume或Volume Container而不是在Dockerfile中添加数据文件。 https://docs.docker.com/engine/tutorials/dockervolumes/

Interesting Posts