Docker部署Keycloak 20.0.3连接PostgreSQL数据库报错求助
Keycloak 20.0.3 连接PostgreSQL持久化存储失败排查
操作步骤
用户执行的Docker配置命令:
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
错误日志
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
解决思路
1. 修正PostgreSQL容器启动命令的参数错误
原命令重复使用了-d参数,会导致Docker解析异常,容器可能未正常启动。修正后的命令:
docker run --name postgresP -p 5432:5432 --net keycloak-network -e POSTGRES_PASSWORD=admin -e POSTGRES_USER=admin -e POSTGRES_DB=pdb -d postgres:latest
2. 修正Keycloak的数据库连接地址
Docker容器内的localhost指向容器自身,而非宿主机。由于两个容器在同一自定义网络中,直接使用PostgreSQL容器名称postgresP作为地址,同时指定Keycloak版本为20.0.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://postgresP:5432/pdb -e KC_DB_USERNAME=admin -e KC_DB_PASSWORD=admin quay.io/keycloak/keycloak:20.0.3 start-dev
3. 验证容器状态与网络连通性
- 检查PostgreSQL容器运行状态:
docker ps | grep postgresP,未启动则重新启动 - 在Keycloak容器内测试网络连通:
docker exec -it keycloakP ping postgresP,确认地址可达 - 手动验证数据库连接:用PostgreSQL客户端连接
postgresP:5432,确认用户名、密码、数据库名正确
4. 核对Keycloak版本的环境变量
20.0.3版本的数据库相关参数需确保无拼写错误:
KC_DB=postgres:指定数据库类型KC_DB_URL:JDBC连接地址KC_DB_USERNAME:数据库用户名KC_DB_PASSWORD:数据库密码
内容的提问来源于stack exchange,提问作者hs27
相关产品推荐
相关产品推荐

