微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过CLI命令配置dockerized Keycloak

如何解决通过CLI命令配置dockerized Keycloak

我正在尝试配置Docker化的Keycloak服务器,例如通过Dockerfile中的CLI命令创建领域:

FROM quay.io/keycloak/keycloak:11.0.0

# Create realm "realm_borrar" on keycloak
RUN /opt/jboss/keycloak/bin/kcadm.sh create realms -s realm=my_new_realm -s enabled=true -o --server http://localhost:8080/auth --realm master --user admin --password admin

docker build -f ...的结果是:

Logging into http://localhost:8080/auth as user admin of realm master
Failed to send request - Connect to localhost:8080 [localhost/127.0.0.1] Failed: Connection refused (Connection refused)

如果我运行容器(使用相同的Dockerfile创建但删除了RUN语句),并且我执行了相同的CLI命令(kcadm.sh ....),则该容器有效。

在Dockerfile中配置Keycloak的正确方法应该是什么?

谢谢。

解决方法

这是一个关于如何为 ubuntu 执行此操作的示例...

  1. 在终端上,将 Keycloak 作为 dockerfile 运行,例如:

    docker run --name keycloak -p 8484:8080 -e DB_VENDOR=h2 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak:11.0.0 
    
  2. 在另一个终端,运行您需要的 CLI 命令作为容器的 exec 命令,例如对于 kcadm.sh get realms 做:

    docker exec -it keycloak /opt/jboss/keycloak/bin/kcadm.sh get realms --server http://localhost:8080/auth --realm master --user admin --password admin 
    

如果您想在同一个终端上运行所有内容,请在第一个 docker 命令上使用 -d(分离)。

对于使用文件的create realms,运行时将文件的目录映射到keycloack里面(理论上直接映射文件也可以)例如:

    docker run --name keycloak -p 8484:8080 -d -e DB_VENDOR=h2 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -v host_abs_path:/cfg jboss/keycloak:11.0.0 
    #wait for keycloak to start...
    sleep 10
    docker exec -it keycloak /opt/jboss/keycloak/bin/kcadm.sh create realms --server http://localhost:8080/auth --realm master --user admin --password admin -f /cfg/my_realms.json
,

很显然,当您要添加领域时,Keycloak必须正在运行,并且必须已连接到DB。在构建Docker映像时并非如此。只能在容器运行时完成,因此请使用启动脚本。

https://hub.docker.com/r/jboss/keycloak/

可以通过创建自己的Dockerfile来添加自定义脚本:

FROM密钥披风 COPY自定义脚本/ / opt / jboss / startup-scripts /

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。