我有一个 Spring boot java 应用程序,它使用 Keycloak 进行身份验证和授权。 我已经创建了我的领域及其用户和角色。我想使用 docker compose 对应用程序进行 dockerize。所以我创建了我的 java 应用程序的 docker 映像。 但是当我想创建一个 Keycloak 实例(从 dockerhub 拉取 Keyckloak 镜像)时,我将丢失之前创建的持久化领域、用户和角色,因为它会从拉取的 docker 镜像创建一个新的 Keycloak。每次使用 docker compose 运行应用程序时,如何保留这些数据? 实际上,每当我运行 docker compose 时,我都需要自动初始化 Keycloak 数据(领域、用户和角色)。
更新:
让我把问题说得更清楚。
我想将代码放在 Github 上,当有人获取并运行它时(彻底的 docker compose);通过预定义的keycloak用户和密码,使用该应用程序。问题是,当有人每次通过 docker compose 运行代码时,没有领域、用户和角色,因为 Keycloak 镜像被拉取并运行时没有任何数据(领域、用户等)。实际上我不希望运行应用程序的用户定义Keycloak数据(领域、用户等)。我希望这些数据已经存在于每个运行的应用程序中,以便用户可以登录到我的应用程序并使用它。
application.yml:
spring:
application:
name: my-client
security:
oauth2:
client:
registration:
myclientapp:
client-id: my-client-app
client-secret: secrectKey12345
scope: openid, profile, roles
authorization-grant-type: authorization_code
redirect-uri: http://localhost:8085/login/oauth2/code/myclientapp
provider:
myclientapp:
authorization-uri: http://localhost:8080/realms/myclientapp/protocol/openid-connect/auth
token-uri: http://localhost:8080/realms/myclientapp/protocol/openid-connect/token
jwk-set-uri: http://localhost:8080/realms/myclientapp/protocol/openid-connect/certs
user-info-uri: http://localhost:8080/realms/myclientapp/protocol/openid-connect/userinfo
user-name-attribute: preferred_username
pox.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.my-client</groupId>
<artifactId>client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>client</name>
<description>Demo project for Spring Client</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
非常感谢。
导出您的 Keycloak 领域和用户并将其添加到容器导入文件夹中。
配置领域客户端和用户后,在 Docker 桌面中:
Exec
选项卡cd /opt/keycloak/bin/
sh ./kc.sh --dir /tmp/keycloak/
--用户领域_文件`Files
选项卡并获取要恢复的领域的导出文件volume
来挂载您放置导出文件的目录 /opt/keycloak/data/import/
。就我而言: volumes:
- ./keycloak/import/:/opt/keycloak/data/import/