You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak生产环境无法获取JDBC连接问题求助(Docker Compose配置)

问题排查与修复方案

1. 清理重复的环境变量

你的Keycloak配置里KC_DB_URL重复定义了两次,直接删除其中一行即可,避免配置冲突:

- KC_DB_URL=jdbc:postgresql://qg_cms-db/keycloak

2. 自动创建Keycloak所需的PostgreSQL数据库

当前Postgres容器默认只会创建与POSTGRES_USER同名的postgres数据库,Keycloak要连接的keycloak数据库不存在。在qg_cms-db的环境变量中添加以下配置,容器启动时会自动创建目标数据库:

- POSTGRES_DB=keycloak

3. 明确指定JDBC URL的端口(推荐)

虽然PostgreSQL默认端口为5432,但明确指定端口可以避免潜在的端口映射问题,修改KC_DB_URL为:

- KC_DB_URL=jdbc:postgresql://qg_cms-db:5432/keycloak

4. 让Keycloak等待Postgres完全就绪

depends_on仅保证启动顺序,不会等待Postgres完成初始化。修改Keycloak的depends_on配置,依赖Postgres的健康检查状态:

depends_on:
  qg_cms-db:
    condition: service_healthy

这样Keycloak会等到Postgres的健康检查通过后再启动,避免连接时数据库未就绪的问题。

修复后的完整配置示例

qg_cms-db:
    container_name: qg_cms-db
    image: postgres:16-alpine
    networks:
      - qg_cms-network
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=keycloak
      - PGPORT=5432
    ports:
      - 5432:5432
    volumes:
      - ./containers/data/postgres:/data/db
      - ./init-scripts:/docker-entrypoint-initdb.d
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
  
keycloak:
    image: quay.io/keycloak/keycloak:25.0.4
    command:
      - start
      - --optimized
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=verysecretpwd
      - KC_HOSTNAME_URL=https://myhost/
      - KC_HOSTNAME_ADMIN_URL=https://myhost/
      - KEYCLOAK_IMPORT=/opt/keycloak/data/import/realm.json
      - KC_PROXY=edge
      - PROXY_ADDRESS_FORWARDING=true
      - LOG_LEVEL=ALL
      - KC_DB=postgres
      - KC_DB_URL=jdbc:postgresql://qg_cms-db:5432/keycloak
      - KC_DB_USERNAME=postgres
      - KC_DB_PASSWORD=postgres
      - KC_LOG_LEVEL=DEBUG
      - KC_HOSTNAME_STRICT=false
    ports:
      - 8080:8080
      - 8443:8443
    depends_on:
      qg_cms-db:
        condition: service_healthy
    networks:
      - qg_cms-network

额外检查项

  • 确认init-scripts目录下的初始化脚本不会删除或修改keycloak数据库;
  • 检查两个容器是否处于同一qg_cms-network网络(默认Docker Compose会自动创建该网络)。

内容的提问来源于stack exchange,提问作者joe Abou Nakoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:46:04