本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

keycloak-clustered 是基于 quay.io/keycloak/keycloak 官方 Docker 镜像的扩展版本,通过添加 JDBC_PING 集群发现协议,简化了 Keycloak 集群的部署和配置。该镜像旨在帮助用户快速构建支持分布式会话共享和高可用性的 Keycloak 集群环境,适用于开发测试和生产部署场景。
| 标签版本 | Dockerfile 链接 |
|---|---|
26.0.8, latest | Dockerfile |
26.0.7 | Dockerfile |
26.0.6 | Dockerfile |
26.0.5 | Dockerfile |
26.0.4 | Dockerfile |
26.0.2 | Dockerfile |
26.0.1 | Dockerfile |
26.0.0 | Dockerfile |
25.0.6 | Dockerfile |
25.0.5 | Dockerfile |
25.0.4 | Dockerfile |
25.0.2 | Dockerfile |
25.0.1 | Dockerfile |
25.0.0 | Dockerfile |
该镜像继承 Keycloak 官方镜像的所有环境变量,完整配置可参考 Keycloak 官方文档。常用基础变量包括:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
KEYCLOAK_ADMIN | 管理员用户名 | - |
KEYCLOAK_ADMIN_PASSWORD | 管理员密码 | - |
KC_DB | 数据库类型(mysql/mariadb/postgres/mssql) | - |
KC_DB_URL_HOST | 数据库主机地址 | - |
KC_DB_URL_DATABASE | 数据库名称 | keycloak |
KC_DB_USERNAME | 数据库用户名 | - |
KC_DB_PASSWORD | 数据库密码 | - |
KC_LOG_LEVEL | 日志级别 | INFO |
| 环境变量 | 描述 | 示例值 |
|---|---|---|
JGROUPS_DISCOVERY_EXTERNAL_IP | 集群节点外部IP/主机名 | keycloak-clustered-1 |
进入对应版本目录,执行以下命令构建镜像:
docker build -t ivanfranchin/keycloak-clustered:latest .
docker network create keycloak-net
docker run --rm --name mysql -p 3306:3306 \ -e MYSQL_DATABASE=keycloak \ -e MYSQL_USER=keycloak \ -e MYSQL_PASSWORD=password \ -e MYSQL_ROOT_PASSWORD=root_password \ --network keycloak-net \ mysql:9.1.0
docker run --rm --name keycloak-clustered-1 -p 8080:8080 \ -e KEYCLOAK_ADMIN=admin \ -e KEYCLOAK_ADMIN_PASSWORD=admin \ -e KC_DB=mysql \ -e KC_DB_URL_HOST=mysql \ -e KC_DB_URL_DATABASE=keycloak \ -e KC_DB_USERNAME=keycloak \ -e KC_DB_PASSWORD=password \ -e KC_LOG_LEVEL=INFO,org.infinispan:DEBUG,org.jgroups:DEBUG \ -e JGROUPS_DISCOVERY_EXTERNAL_IP=keycloak-clustered-1 \ --network keycloak-net \ ivanfranchin/keycloak-clustered:latest start-dev
docker run --rm --name keycloak-clustered-2 -p 8081:8080 \ -e KEYCLOAK_ADMIN=admin \ -e KEYCLOAK_ADMIN_PASSWORD=admin \ -e KC_DB=mysql \ -e KC_DB_URL_HOST=mysql \ -e KC_DB_URL_DATABASE=keycloak \ -e KC_DB_USERNAME=keycloak \ -e KC_DB_PASSWORD=password \ -e KC_LOG_LEVEL=INFO,org.infinispan:DEBUG,org.jgroups:DEBUG \ -e JGROUPS_DISCOVERY_EXTERNAL_IP=keycloak-clustered-2 \ --network keycloak-net \ ivanfranchin/keycloak-clustered:latest start-dev
docker network create keycloak-net
docker run --rm --name mariadb -p 3306:3306 \ -e MARIADB_DATABASE=keycloak \ -e MARIADB_USER=keycloak \ -e MARIADB_PASSWORD=password \ -e MARIADB_ROOT_PASSWORD=root_password \ --network keycloak-net \ mariadb:10.11.10
docker run --rm --name keycloak-clustered-1 -p 8080:8080 \ -e KEYCLOAK_ADMIN=admin \ -e KEYCLOAK_ADMIN_PASSWORD=admin \ -e KC_DB=mariadb \ -e KC_DB_URL_HOST=mariadb \ -e KC_DB_URL_DATABASE=keycloak \ -e KC_DB_USERNAME=keycloak \ -e KC_DB_PASSWORD=password \ -e KC_LOG_LEVEL=INFO,org.infinispan:DEBUG,org.jgroups:DEBUG \ -e JGROUPS_DISCOVERY_EXTERNAL_IP=keycloak-clustered-1 \ --network keycloak-net \ ivanfranchin/keycloak-clustered:latest start-dev
docker run --rm --name keycloak-clustered-2 -p 8081:8080 \ -e KEYCLOAK_ADMIN=admin \ -e KEYCLOAK_ADMIN_PASSWORD=admin \ -e KC_DB=mariadb \ -e KC_DB_URL_HOST=mariadb \ -e KC_DB_URL_DATABASE=keycloak \ -e KC_DB_USERNAME=keycloak \ -e KC_DB_PASSWORD=password \ -e KC_LOG_LEVEL=INFO,org.infinispan:DEBUG,org.jgroups:DEBUG \ -e JGROUPS_DISCOVERY_EXTERNAL_IP=keycloak-clustered-2 \ --network keycloak-net \ ivanfranchin/keycloak-clustered:latest start-dev
docker network create keycloak-net
docker run --rm --name postgres -p 5432:5432 \ -e POSTGRES_DB=keycloak \ -e POSTGRES_USER=keycloak \ -e POSTGRES_PASSWORD=password \ --network keycloak-net \ postgres:17.2
docker run --rm --name keycloak-clustered-1 -p 8080:8080 \ -e KEYCLOAK_ADMIN=admin \ -e KEYCLOAK_ADMIN_PASSWORD=admin \ -e KC_DB=postgres \ -e KC_DB_URL_HOST=postgres \ -e KC_DB_URL_DATABASE=keycloak \ -e KC_DB_SCHEMA=myschema \ -e KC_DB_USERNAME=keycloak \ -e KC_DB_PASSWORD=password \ -e KC_LOG_LEVEL=INFO,org.infinispan:DEBUG,org.jgroups:DEBUG \ -e JGROUPS_DISCOVERY_EXTERNAL_IP=keycloak-clustered-1 \ --network keycloak-net \ ivanfranchin/keycloak-clustered:latest start-dev
docker run --rm --name keycloak-clustered-2 -p 8081:8080 \ -e KEYCLOAK_ADMIN=admin \ -e KEYCLOAK_ADMIN_PASSWORD=admin \ -e KC_DB=postgres \ -e KC_DB_URL_HOST=postgres \ -e KC_DB_URL_DATABASE=keycloak \ -e KC_DB_SCHEMA=myschema \ -e KC_DB_USERNAME=keycloak \ -e KC_DB_PASSWORD=password \ -e KC_LOG_LEVEL=INFO,org.infinispan:DEBUG,org.jgroups:DEBUG \ -e JGROUPS_DISCOVERY_EXTERNAL_IP=keycloak-clustered-2 \ --network keycloak-net \ ivanfranchin/keycloak-clustered:latest start-dev
警告:当前该配置存在问题,暂不推荐使用。
http://localhost:8080 和 http://localhost:8081admin,密码:admin)admin 用户有 2 个会话以 MySQL 为例,进入数据库容器查看集群表:
# 进入 MySQL 终端 docker exec -it -e MYSQL_PWD=password mysql mysql -ukeycloak --database keycloak # 查看 JGROUPSPING 表(集群节点信息) mysql> SELECT * FROM JGROUPSPING;
Ctrl+CCtrl+\docker network rm keycloak-net
Vagrantfile 配置数据库类型(可选)vagrant up
vagrant suspendvagrant upvagrant haltvagrant destroy -f自 Keycloak 26.1.0 版本起,集群发现默认传输栈已切换为 JDBC-PING,简化了集群配置并提升了云环境兼容性。有关集群部署的详细指南,可参考以下文章:
Ivan Franchin
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429