我正在尝试使用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
但我得到以下错误。我试图排除故障,但不幸的是,文档的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
我试图实现的是使用自定义数据库的Keycloak,而不是H2和以后,创建持久的用户/配置通过相同的。
1条答案
按热度按时间unguejic1#
您的
KC_DB_URL
设置不正确;Postgres没有在localhost
上运行(这意味着“在keycloak容器中”);它在postgresP
容器中运行,因此需要使用容器名称作为主机名:这不会产生一个有效的配置,因为当您启动Keycloak容器时,您设置的是
-p 9090:9090
,但Keycloak正在侦听容器内的端口8080,因此您需要-p 9090:8080
。您不需要在postgres容器上发布端口(
-p 5432:5432
),以便从keycloak容器访问它;只有当你想从你的主机或网络上的其他地方访问数据库时,端口发布才是必要的。一些与问题无关的评论:
1.使用
postgres:latest
作为你的镜像会在某个时候引起问题,当:latest
意外地给你一个新的Postgres主版本时;请使用显式版本(例如postgres:15
)。大多数图片也是如此--固定到特定版本(或者至少是特定的主要版本)几乎总是一个好主意。
1.帮你自己一个忙,使用
docker compose
而不是手动运行一堆docker run
命令。你当前的配置可以用下面的docker-compose.yaml
来表示:将上述内容放入
docker-compose.yaml
中,然后运行docker compose up
。你会注意到,在这个例子中,我没有发布postgres端口,这与我之前的评论一致。
1.无论您是使用
docker compose
还是仅使用多个docker run
命令行,您可能都希望使用Docker卷来存储postgres数据,以便在重新启动容器时不会丢失所有内容。我没有在我的示例中配置它,但是您可以在官方文档和本网站的所有地方找到适当的示例。