Keycloak与Postgres Docker容器连接失败问题求助
解决Keycloak与PostgreSQL连接认证失败问题
核心问题分析
从错误日志FATAL: password authentication failed for user "keycloak"可以明确,Keycloak无法通过正确凭证连接PostgreSQL,结合你的Docker Compose配置,主要存在以下几处配置错误:
解决方案步骤
1. 修正数据库地址配置
你的PostgreSQL服务在Docker Compose中命名为postgres-keycloak,但Keycloak的DB_ADDR参数设置为postgres——Docker Compose内部网络中,服务名就是容器的主机名,这会导致Keycloak找不到正确的数据库主机。
修改Keycloak环境变量:
DB_ADDR: postgres-keycloak
2. 修正Keycloak端口映射
Keycloak默认监听容器内的8080端口,你的配置中映射了8082:8082,这会导致外部无法访问服务,同时可能干扰内部启动检测逻辑。调整端口映射:
ports: - 8082:8080
3. 清理旧PostgreSQL数据卷(若之前部署过)
如果之前创建过postgres_data卷,卷内可能留存旧的数据库用户配置,导致新设置的密码不生效。执行以下命令清理:
# 停止并删除现有容器 docker-compose down # 删除旧数据卷(可通过docker volume ls查看完整卷名) docker volume rm <你的项目目录名>_postgres_data
4. 完整修正后的docker-compose.yml
# keycloak dependencies services: postgres-keycloak: image: postgres volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_DB: keycloak POSTGRES_USER: keycloak POSTGRES_PASSWORD: password keycloak: image: quay.io/keycloak/keycloak:legacy environment: DB_VENDOR: POSTGRES DB_ADDR: postgres-keycloak DB_DATABASE: keycloak DB_USER: keycloak DB_SCHEMA: public DB_PASSWORD: password KEYCLOAK_USER: admin KEYCLOAK_PASSWORD: admin # Uncomment the line below if you want to specify JDBC parameters. The parameter below is just an example, and it shouldn't be used in production without knowledge. It is highly recommended that you read the PostgreSQL JDBC driver documentation in order to use it. #JDBC_PARAMS: "ssl=true" ports: - 8082:8080 depends_on: - postgres-keycloak volumes: postgres_data: driver: local
5. 重新部署服务
执行命令启动容器:
docker-compose up -d
额外注意事项
depends_on仅保证容器启动顺序,不保证PostgreSQL服务完全就绪,生产环境建议添加健康检查机制,确保数据库启动完成后再启动Keycloak。- 生产环境禁止使用明文密码,建议通过Docker Secrets或环境变量文件传递敏感信息。
内容的提问来源于stack exchange,提问作者user19717788
相关产品推荐
相关产品推荐

