升级Keycloak 20时如何配置MariaDB数据库连接URL?
Keycloak 16升级到20的Docker Compose配置调整(MariaDB适配)
以下是适配Keycloak 20 + MariaDB的完整docker-compose.yml配置,同时修复原配置中的端口冲突问题:
version: "3.9" services: accounts: image: quay.io/keycloak/keycloak:20.0.3 container_name: Accounts ports: - 8080:8080 environment: - KC_FRONTEND_URL=https://accounts.example.local/auth - KC_PROXY=edge - KC_ADMIN_USER=user - KC_ADMIN_PASSWORD=pass - KC_DB=mariadb - KC_DB_URL=jdbc:mariadb://database:3306/accounts?useSSL=false&allowPublicKeyRetrieval=true - KC_DB_USERNAME=db_user - KC_DB_PASSWORD=db_pass command: ["start", "--optimized"] logging: driver: none restart: always database: image: mariadb:10.11 container_name: AccountsDatabase ports: - 3306:3306 environment: - MARIADB_ROOT_PASSWORD=root_pass - MARIADB_DATABASE=accounts - MARIADB_USER=db_user - MARIADB_PASSWORD=db_pass volumes: - /Temp/AccountsDatabases:/var/lib/mysql logging: driver: none restart: always admin: image: adminer container_name: AccountsAdminer restart: always logging: driver: none ports: - 8081:8080 environment: - ADMINER_DEFAULT_SERVER=database
关键变更说明:
- 镜像替换:Keycloak 17+官方镜像迁移到
quay.io/keycloak/keycloak,不再使用jboss/keycloak,建议指定具体版本(如20.0.3)避免自动升级带来的兼容问题。 - 环境变量重构:
- 原
KEYCLOAK_USER/KEYCLOAK_PASSWORD替换为KC_ADMIN_USER/KC_ADMIN_PASSWORD - 数据库配置改用
KC_DB系列变量:KC_DB=mariadb指定数据库类型,KC_DB_URL直接配置JDBC连接URL - 原
PROXY_ADDRESS_FORWARDING=true替换为KC_PROXY=edge,适配反向代理场景 - 原
KEYCLOAK_FRONTEND_URL替换为KC_FRONTEND_URL,若需保留旧版/auth上下文路径,已通过默认配置兼容(Keycloak 18+默认移除/auth,需额外添加KC_HTTP_RELATIVE_PATH=/auth)
- 原
- MariaDB URL格式:标准格式为
jdbc:mariadb://<主机>:<端口>/<数据库名>?<参数>,示例中:database是Docker服务名,对应MariaDB容器3306是默认端口accounts是数据库名useSSL=false关闭SSL(测试环境用,生产建议开启)allowPublicKeyRetrieval=true解决部分连接时的公钥获取问题
- 启动命令:新版本Keycloak需要显式指定启动命令,
start --optimized用于生产环境优化启动 - 端口冲突修复:原配置中
accounts和admin服务都映射8080端口,将admin服务改为8081端口避免冲突
内容的提问来源于stack exchange,提问作者Big boy
相关产品推荐
相关产品推荐

