基于Quay镜像配置带PostgreSQL的Keycloak 21生产环境失败求助
解决Keycloak生产环境启动报错:"No value present"
问题原因
你碰到的ERROR: No value present是因为新版Keycloak(Quay.io镜像最新版,一般为20+版本)的环境变量配置存在多处不符合规范的地方,导致初始化时无法完成必要的构建步骤。
具体修正内容
1. 替换管理员账号环境变量
新版Keycloak已弃用KC_USER和KC_PASSWORD,改用KC_ADMIN和KC_ADMIN_PASSWORD来设置初始管理员账号。
2. 补全数据库连接URL
KC_DB_URL必须填写完整的JDBC连接地址,你当前仅填写了postgres,正确格式为jdbc:postgresql://postgres:5432/keycloak——其中postgres是Docker Compose中PostgreSQL服务的名称,5432是默认端口,keycloak是指定的数据库名。
3. 优化启动命令(推荐)
生产环境建议使用start --optimized启动,该命令会预先构建Keycloak,提升启动速度和运行性能。
4. 调整数据库名称变量(可选)
将原有的KC_DB改为KC_DB_NAME,这是新版Keycloak的标准变量名,可避免识别异常。
修正后的Docker Compose配置
version: "3.7" services: keycloak: container_name: keycloak_app image: quay.io/keycloak/keycloak:latest restart: always ports: - "8443:8443" volumes: - "/etc/ssl/keycloak/:/etc/x509/https" # 映射证书到容器内 environment: KC_ADMIN: admin KC_ADMIN_PASSWORD: 123 KC_HOSTNAME: mydomain.net KC_DB_VENDOR: postgres KC_DB_URL: jdbc:postgresql://postgres:5432/keycloak KC_DB_NAME: keycloak KC_DB_USER: admin KC_DB_PASSWORD: 123 KC_HTTPS_CERTIFICATE_FILE: /etc/x509/https/tls.crt KC_HTTPS_CERTIFICATE_KEY_FILE: /etc/x509/https/tls.key KC_DEBUG: true depends_on: - postgres command: [start --optimized] postgres: image: postgres:latest restart: always environment: POSTGRES_DB: keycloak POSTGRES_USER: admin POSTGRES_PASSWORD: 123 volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data:
额外排查要点
- 确认
/etc/ssl/keycloak/目录下的tls.crt和tls.key文件存在,且容器能正常读取(可检查文件权限,确保容器用户拥有读取权限)。 - 先验证PostgreSQL服务启动正常,执行
docker compose logs postgres查看日志,确认数据库初始化完成。 - 如果问题仍存在,给启动命令添加
--verbose参数:command: [start --optimized --verbose],通过详细日志进一步定位问题。
内容的提问来源于stack exchange,提问作者jogarcia
相关产品推荐
相关产品推荐

