如何在Docker部署的Keycloak 20中禁用并清除主题缓存
在Docker Keycloak 20.0.3中禁用并清除主题缓存(ISPN缓存配置)
一、禁用主题缓存
Keycloak 20+版本通过SPI配置控制主题缓存,无需修改XML文件,直接用环境变量或启动参数即可设置:
- 启动容器时添加以下环境变量,分别禁用主题和模板的缓存:
若用Docker Compose,在docker run -d \ -e KC_CACHE=ispn \ -e KC_SPI_THEME_CACHE_THEMES=false \ -e KC_SPI_THEME_CACHE_TEMPLATES=false \ # 补充其他必要参数(端口、管理员账号等) quay.io/keycloak/keycloak:20.0.3 startenvironment节点添加:environment: KC_CACHE: ispn KC_SPI_THEME_CACHE_THEMES: "false" KC_SPI_THEME_CACHE_TEMPLATES: "false"
二、清除已有的主题缓存
针对ISPN缓存配置,有三种实用方式:
1. 重启容器(最简方案)
如果未配置ISPN缓存持久化(默认是本地内存缓存),直接重启容器就能清空所有缓存:
docker restart <你的Keycloak容器名称>
2. 通过管理API清除缓存
用Keycloak Admin API主动触发缓存失效,步骤如下:
- 先获取管理员访问令牌:
curl -X POST "http://<Keycloak主机>:<端口>/realms/master/protocol/openid-connect/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "username=<管理员账号>" \ -d "password=<管理员密码>" \ -d "grant_type=password" \ -d "client_id=admin-cli" - 用拿到的
access_token调用缓存失效接口:curl -X POST "http://<Keycloak主机>:<端口>/admin/master/console/api/cache/invalidate" \ -H "Authorization: Bearer <获取到的access-token>"
3. 清理持久化缓存(若配置了ISPN持久化)
如果你的ISPN缓存配置了持久化(比如JDBC、文件存储),需要手动清理对应存储:
- 文件存储:找到容器内挂载到宿主机的缓存目录,删除缓存文件;
- JDBC存储:连接缓存数据库,清空带
ispn或cache前缀的缓存表。
内容的提问来源于stack exchange,提问作者marcg
相关产品推荐
相关产品推荐

