如何将领域文件导出到 keycloak docker 容器中?

Posted

技术标签:

【中文标题】如何将领域文件导出到 keycloak docker 容器中?【英文标题】:How to export realm file into keycloak docker container? 【发布时间】:2018-08-11 00:39:13 【问题描述】:

我正在尝试将领域文件导出到 keycloak docker 容器中,但无法执行此操作,因为执行此命令时服务器正在运行:

bin/standalone.sh -Dkeycloak.migration.action=export
-Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=<DIR TO EXPORT TO>

我尝试修改 docker-entrypoint.sh 并删除了执行服务器以启动的命令:

#!/bin/bash

if [ $KEYCLOAK_USER ] && [ $KEYCLOAK_PASSWORD ]; then
    keycloak/bin/add-user-keycloak.sh --user $KEYCLOAK_USER --password $KEYCLOAK_PASSWORD
fi

if [ "$DB_VENDOR" == "POSTGRES" ]; then
  databaseToInstall="postgres"
elif [ "$DB_VENDOR" == "mysql" ]; then
  databaseToInstall="mysql"
elif [ "$DB_VENDOR" == "H2" ]; then
  databaseToInstall=""
else
    if (printenv | grep '^POSTGRES_' &>/dev/null); then
      databaseToInstall="postgres"
    elif (printenv | grep '^MYSQL_' &>/dev/null); then
      databaseToInstall="mysql"
    fi
fi

if [ "$databaseToInstall" != "" ]; then
    echo "[KEYCLOAK DOCKER IMAGE] Using the external $databaseToInstall database"
    /bin/sh /opt/jboss/keycloak/bin/change-database.sh $databaseToInstall
else
    echo "[KEYCLOAK DOCKER IMAGE] Using the embedded H2 database"
fi

exit $?

但是,当我运行 keycloak 的 pod 时,我得到了 caschLoopBack。有什么解决方案可以在 docker 容器内进行导出并停止服务器运行?

【问题讨论】:

【参考方案1】:

您可以启动一个临时容器。我正在使用 swarm 和可附加网络,但是用一些 --link 到 DB 容器替换 --network 标志应该为 vanilla docker 容器做:

docker run --rm --network=naq\
    --name keycloak_exporter\
    -v /tmp:/tmp/keycloak-export\
    -e POSTGRES_DATABASE=keycloak\
    -e POSTGRES_PASSWORD=password\
    -e POSTGRES_USER=keycloak\
    -e DB_VENDOR=POSTGRES\
    -e POSTGRES_PORT_5432_TCP_ADDR=keycloakdb\
    jboss/keycloak:3.4.3.Final\
    -Dkeycloak.migration.action=export\
    -Dkeycloak.migration.provider=dir\
    -Dkeycloak.migration.dir=/tmp/keycloak-export\
    -Dkeycloak.migration.usersExportStrategy=SAME_FILE\
    -Dkeycloak.migration.realmName=Naq\

然后您将在主机上的 /tmp 目录中找到导出文件。

【讨论】:

我找到了这个解决方案github.com/slim-hmidi/keycloak-export-realm 这对我来说非常有效,我确实用 --link 替换了网络到 db 容器。非常感谢马特!

以上是关于如何将领域文件导出到 keycloak docker 容器中?的主要内容,如果未能解决你的问题,请参考以下文章

从 KeyCloak 导出所有用户

如何将“帐户”的概念添加到 Keycloak?

Keycloak IdP SAML2 将 XML 元数据导出到 SP

如何将角度应用程序从keycloak登录重定向到特定路线

我们可以将用户组/不同用户的 Keycloak 多个密码策略配置到单个领域吗?

KeyCloak - 以编程方式创建领域/用户/组?