热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

运行WildflySwarm与KeyCloak在码头图像上

如何解决《运行WildflySwarm与KeyCloak在码头图像上》经验,为你挑选了1个好方法。

我使用WildFly Swarm项目生成器使用KeyCloak服务器创建了小型Wildfly Swarm应用程序我添加了一些代码,使用以下内容构建并启动了我的胖罐:

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

应用程序盯着我创建新域后添加用户等.然后我注意到keycloak在我的目标文件夹中创建了3个文件.那些文件在哪里:

keycloak.h2.db

keycloak.lock.db

keycloak.trace.db

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

建立图像使用:

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
                                     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并尝试登录时我得到错误的用户名和密码消息所以我无法登录到keycloak.所以我想知道为什么会这样?因为我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

捕获在哪里?



1> emag..:

看起来Swarm Keycloak Server在dir执行java(均值user.dir)默认情况下读取keycloak*.db .容器中的swarm进程不会读取/opt/keycloak*.db,因为java会运行/.

您可以使用wildfly.swarm.keycloak.server.dbsysprop 更改数据目录. 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

PS

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


推荐阅读
author-avatar
少年奇趣视频
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有