如何将领域文件导出到 keycloak docker 容器中?
How to export realm file into keycloak docker container?
我正在尝试将领域文件导出到 keycloak docker 容器中,但我无法做到这一点,因为当我执行此命令时服务器正在 运行ing:
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 容器内进行导出并从 运行ning 停止服务器?
您可以启动一个临时容器。我正在使用 swarm 和可附加网络,但是将 --network 标志替换为一些 --link 到 DB 容器应该为普通 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 目录中找到导出文件。
我正在尝试将领域文件导出到 keycloak docker 容器中,但我无法做到这一点,因为当我执行此命令时服务器正在 运行ing:
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 容器内进行导出并从 运行ning 停止服务器?
您可以启动一个临时容器。我正在使用 swarm 和可附加网络,但是将 --network 标志替换为一些 --link 到 DB 容器应该为普通 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 目录中找到导出文件。