与KeyCloak上泊坞窗图像运行Wildfly群

问题描述:

我创建小Wildfly Swarm应用与KeyCloak服务器使用WildFly Swarm Project Generator我添加了一些代码,建造和使用开始我的脂肪罐子:与KeyCloak上泊坞窗图像运行Wildfly群

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

应用盯着我创造了新的境界添加用户之后等我发现keycloak在我的目标文件夹中创建了3个文件。这些文件,其中:

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

然后我决定创建码头工人的图像和在当地码头工人运行环境。使用

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"] 

内置图像:所以我创建搬运工文件

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

和形象在我的搬运工图像列表中可见:

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 

它看起来不错,但是当我走了到本地主机:8180/auth并尝试登录我得到错误的用户名和密码信息,所以我无法登录到keycloak。所以我想知道这是为什么?因为我manoal包括 码头图像中的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 
[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 

那么,抓住哪里?

+0

login-service-swarm是一个Keycloak服务器还是一个由Keycloak保护的微服务?目前我还不完全清楚 – Ken

+0

@Ken:login-service-swarm是一个Keycloak服务器 – Kiki

它看起来像Swarm Keycloak Server在默认情况下读取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"] 

或者,你也可以使用-w选项与docker run

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

以下命令应该也可以。

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

附:

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

+0

工作就像一个魅力。谢谢! – Kiki

+0

好东西emag,谢谢! – Ken