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

如何将Keycloak从开发模式切换为生产模式?Docker Compose异常求助

Keycloak 20.x 生产模式配置修复(容器启动后退出问题解决)

核心问题分析

你遇到的容器启动后退出问题,本质是Keycloak 17+生产模式(start命令)的强制要求未满足:

  • 生产模式必须启用HTTPS,无SSL证书会直接启动失败
  • 生产模式需要先完成配置构建(适配数据库、SSL等),否则无法加载核心配置
  • 挂载卷时权限不匹配(容器默认以uid=1000的非root用户运行,本地目录权限不足导致无法写入)
  • 生产模式不会自动创建admin用户,需手动初始化

修正后的Docker Compose配置

version: '3.8'

services:
  postgresdb:
    image: postgres:14-alpine
    container_name: postgresdb
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=keycloak
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5

  keycloak:
    image: quay.io/keycloak/keycloak:20.0.0
    container_name: keycloak
    depends_on:
      postgresdb:
        condition: service_healthy
    command: 
      [
        "start",
        "--auto-build", # 自动完成配置构建,无需单独执行build命令
        "--http-port=8081",
        "--http-relative-path=/auth",
        "--https-port=8443"
      ]
    ports:
      - "8081:8081"
      - "8443:8443"
    volumes:
      - ./keycloak-cert:/opt/keycloak/conf/certs # 挂载本地SSL证书目录
      - keycloak-data:/opt/keycloak/data # 持久化Keycloak数据
    environment:
      - KC_DB=postgres
      - KC_DB_URL=jdbc:postgresql://postgresdb:5432/keycloak
      - KC_DB_USERNAME=postgres
      - KC_DB_PASSWORD=postgres
      # SSL证书配置(生产环境建议用正式证书,此处用自签示例)
      - KC_HTTPS_CERT_FILE=/opt/keycloak/conf/certs/tls.crt
      - KC_HTTPS_KEY_FILE=/opt/keycloak/conf/certs/tls.key
      # 允许HTTP访问(仅用于测试,生产环境建议关闭)
      - KC_HTTP_ENABLED=true

volumes:
  postgres-data:
  keycloak-data:

操作步骤

1. 准备本地目录与权限

创建证书和数据目录,并设置容器可访问的权限:

mkdir -p ./keycloak-cert
chown -R 1000:1000 ./keycloak-cert

2. 生成自签SSL证书(测试用)

在keycloak-cert目录下执行:

cd ./keycloak-cert
openssl req -x509 -newkey rsa:4096 -keyout tls.key -out tls.crt -days 365 -nodes -subj "/CN=localhost"

生产环境请替换为权威CA颁发的证书。

3. 启动服务

docker-compose up -d

4. 创建Admin用户(生产模式必须手动执行)

容器启动后,进入容器创建admin用户:

docker exec -it keycloak /opt/keycloak/bin/kc.sh admin create --username admin --password admin1234

关键配置说明

  • --auto-build:自动完成配置构建,避免单独执行build命令的繁琐
  • KC_HTTP_ENABLED=true:临时允许HTTP访问(生产环境建议关闭,仅用HTTPS)
  • 健康检查:确保PostgreSQL完全启动后再启动Keycloak,避免数据库连接失败
  • 卷挂载:用命名卷持久化PostgreSQL和Keycloak数据,避免容器删除后数据丢失

内容的提问来源于stack exchange,提问作者Muzaffar khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:34:54