hs2*_*s27 5 postgresql docker keycloak quarkus
我正在尝试使用 Docker 将 Keycloak (20.0.3) 与 Postgres 数据库连接。这些是我配置它所采取的步骤:
1. docker network create keycloak-network
2. docker run --name postgresP -p 5432:5432 -d --net keycloak-network -e POSTGRES_PASSWORD=admin -e POSTGRES_USER=admin -e POSTGRES_DB=pdb -d postgres:latest
3. docker run -p 9090:9090 --name keycloakP --net keycloak-network -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -e KC_DB=postgres -e KC_DB_URL=jdbc:postgresql://localhost:5432/pdb -e KC_DB_USERNAME=admin -e KC_DB_PASSWORD=admin quay.io/keycloak/keycloak:latest start-dev
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误。我尝试进行故障排除,但不幸的是 Keycloak 的文档不是那么好。任何线索都将受到高度赞赏。提前致谢。
2023-02-10 11:08:36,986 DEBUG [io.quarkus.bootstrap.classloading.QuarkusClassLoader] (main) Adding elements io.quarkus.bootstrap.classloading.PathTreeClassPathElement[io.quarkus:quarkus-devservices-common / runtime=false resources=null] to QuarkusClassLoader Augmentation Class Loader: PROD
2023-02-10 11:08:36,987 DEBUG [io.quarkus.bootstrap.classloading.QuarkusClassLoader] (main) Adding elements io.quarkus.bootstrap.classloading.PathTreeClassPathElement[io.quarkiverse.vault:quarkus-vault-deployment / runtime=false resources=null] to QuarkusClassLoader Augmentation Class Loader: PROD
2023-02-10 11:08:36,987 DEBUG [io.quarkus.bootstrap.classloading.QuarkusClassLoader] (main) Adding elements io.quarkus.bootstrap.classloading.PathTreeClassPathElement[org.keycloak:keycloak-quarkus-server-deployment / runtime=false resources=null] to QuarkusClassLoader Augmentation Class Loader: PROD
2023-02-10 11:08:39,257 DEBUG [io.quarkus.bootstrap.classloading.QuarkusClassLoader] (main) Adding elements io.quarkus.bootstrap.classloading.PathTreeClassPathElement[/ runtime=true resources=null] to QuarkusClassLoader Deployment Class Loader: PROD
2023-02-10 11:08:39,290 DEBUG [io.quarkus.deployment.QuarkusAugmentor] (main) Beginning Quarkus augmentation
2023-02-10 11:08:40,193 TRACE [io.quarkus.bootstrap.classloading.QuarkusClassLoader] (main) Class quarkus.properties not found in parent first load from java.net.URLClassLoader@192c3f1e
2023-02-10 11:08:40,194 TRACE [io.quarkus.bootstrap.classloading.QuarkusClassLoader] (main) Class quarkus.properties not found in parent first load from java.net.URLClassLoader@192c3f1e
ERROR: Failed to run 'build' command.
ERROR: No value present
Run Code Online (Sandbox Code Playgroud)
我想要实现的目标是使用 Keycloak 的自定义数据库而不是 H2,然后通过相同的方式创建持久用户/配置。
lar*_*sks 18
您的KC_DB_URL设置不正确;Postgres 没有运行localhost(这意味着“在 keycloak 容器中”);它在您的postgresP容器中运行,因此您需要使用该容器名称作为主机名:
KC_DB_URL=jdbc:postgresql://postgresP:5432/pdb
Run Code Online (Sandbox Code Playgroud)
这不会产生有效的配置,因为当您启动 Keycloak 容器时,您正在设置-p 9090:9090,但 Keycloak 正在侦听容器内的端口 8080,因此您需要-p 9090:8080.
您不需要-p 5432:5432在 postgres 容器上发布端口 ( ) 即可从 keycloak 容器访问它;仅当您想从主机或网络上的其他位置访问数据库时才需要端口发布。
一些与问题无关的评论:
当你意外地得到一个新的 Postgres 主要版本时,使用postgres:latest你的镜像会在某个时候引起问题;:latest请改用显式版本(例如postgres:15)。
对于大多数图像来说也是如此——固定到特定版本(或至少是特定的主要版本)几乎总是一个好主意。
帮自己一个忙,使用它docker compose而不是手动运行一堆docker run命令。您当前的配置可以用以下形式表示docker-compose.yaml:
services:
postgres:
image: postgres:15
environment:
POSTGRES_PASSWORD: admin
POSTGRES_USER: admin
POSTGRES_DB: pdb
keycloak:
image: quay.io/keycloak/keycloak:20.0
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres/pdb
KC_DB_USERNAME: admin
KC_DB_PASSWORD: admin
ports:
- 9090:8080
command:
- start-dev
Run Code Online (Sandbox Code Playgroud)
将以上内容放入docker-compose.yaml然后运行docker compose up。
您会注意到,根据我之前的评论,我在此示例中没有发布 postgres 端口。
无论您是使用命令行docker compose还是仅使用多个docker run命令行,您可能都希望为 postgres 数据使用 Docker 卷,以便在重新启动容器时不会丢失所有内容。
我没有在我的示例中进行配置,但您可以在官方文档以及本网站的各个地方找到适当的示例。
| 归档时间: |
|
| 查看次数: |
10981 次 |
| 最近记录: |