docker 将Keycloak与Postgres数据库连接

ix0qys7i  于 2023-02-11  发布在  Docker
关注(0)|答案(1)|浏览(307)

我正在尝试使用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和以后,创建持久的用户/配置通过相同的。

unguejic

unguejic1#

您的KC_DB_URL设置不正确;Postgres没有在localhost上运行(这意味着“在keycloak容器中”);它在postgresP容器中运行,因此需要使用容器名称作为主机名:

KC_DB_URL=jdbc:postgresql://postgresP:5432/pdb

这不会产生一个有效的配置,因为当您启动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来表示:

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

将上述内容放入docker-compose.yaml中,然后运行docker compose up
你会注意到,在这个例子中,我没有发布postgres端口,这与我之前的评论一致。
1.无论您是使用docker compose还是仅使用多个docker run命令行,您可能都希望使用Docker卷来存储postgres数据,以便在重新启动容器时不会丢失所有内容。
我没有在我的示例中配置它,但是您可以在官方文档和本网站的所有地方找到适当的示例。

相关问题