运行Wildfly Swarm与KeyCloak在码头图像上

时间:2017-06-27 10:54:43

标签: docker dockerfile keycloak wildfly-swarm

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

CreateProcess

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

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

然后我决定创建docker镜像并在本地docker环境中运行它。所以我创建了docker文件:

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

使用以下方式构建图像:

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

它盯着确定但是当我去localhost:8180 / auth并尝试登录时我收到了错误的用户名和密码消息,所以我无法登录keycloak。所以我想知道为什么会这样?因为我包括manuayl Docker镜像中的keycloak数据库文件,如果我运行以下命令,您可以看到所有文件都按预期存在。

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

那么捕捉在哪里?

1 个答案:

答案 0 :(得分:5)

看起来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

P.S。

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