Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 通过CLI命令配置停靠的KeyClope_Docker_Command Line Interface_Keycloak - Fatal编程技术网

Docker 通过CLI命令配置停靠的KeyClope

Docker 通过CLI命令配置停靠的KeyClope,docker,command-line-interface,keycloak,Docker,Command Line Interface,Keycloak,我正在尝试配置Dockerfile中的dockerized KeyClope服务器,如通过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 htt

我正在尝试配置Dockerfile中的dockerized KeyClope服务器,如通过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中配置KeyClope的正确方法应该是什么


谢谢。

显然,当您想要添加域时,KeyClope必须正在运行,并且必须连接到数据库。当你建立Docker形象时,情况就不是这样了。这只能在容器运行时完成,所以请使用启动脚本

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

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
从钥匙斗篷 复制自定义脚本//opt/jboss/startup脚本/


下面是一个关于如何为ubuntu做这件事的例子

  • 在终端上,以dockerfile的形式运行KeyClope,例如:

    docker run --name keycloak -p 8484:8080 -e DB_VENDOR=h2 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak:11.0.0 
    
  • 在另一个终端上,将所需的CLI命令作为容器的exec命令运行,例如for
    kcadm.sh get realms
    do:

    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(detach)

    对于
    使用文件创建领域
    ,请在运行时将文件目录映射到KeyClock中(直接映射文件在理论上也可以工作),例如:


    我猜启动脚本将在容器初始化时执行,因此重新启动它时,配置将重复,即。E如果脚本创建了一个领域,我停止并重新启动容器,那么这个领域将再次被创建(假设keybeapt允许相同的领域)@PacoAbato那么为什么不在脚本中加入业务逻辑:仅当领域不存在时创建领域我刚刚读到,容器不应停止并恢复,而应销毁并再次创建新的,我将稍后尝试您的解决方案,谢谢。我成功地执行了启动脚本,但是像
    /opt/jboss/keydove/bin/kcadm.sh这样的命令创建领域时总是失败。我想我必须使用嵌入式命令,比如
    /subsystem=keydove server/:write-attribute(name=web-context,value=myContext)
    ,但是找不到哪些属性可以用来添加域。