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

Keyrock容器无法识别默认超级管理员用户问题求助

Keyrock Docker部署认证失败问题排查

一、管理员环境变量的作用

你配置的IDM_ADMIN_USER、IDM_ADMIN_EMAIL、IDM_ADMIN_PASS确实是Keyrock用来初始化默认超级管理员账号的环境变量——容器首次启动时,会根据这些参数在数据库中创建管理员账号(仅当账号不存在时执行)。

二、认证失败的核心原因及修复方案

1. 请求方法错误(最可能的原因)

Keyrock的/v1/auth/tokens接口要求使用POST方法发起请求,但你当前使用的是GET方法,这直接导致认证逻辑不触发,返回401。

修复后的正确请求:

### 获取Keyrock的X-Auth-Token
POST http://localhost:3005/v1/auth/tokens
Content-Type: application/json

{"email":"admin@test.com","password":"1234"}

2. 数据库持久化导致账号未更新

你使用了mysqlVolume持久化卷,如果之前启动过Keyrock容器,数据库中已经存在旧的管理员账号,后续启动时新的环境变量不会覆盖已有账号(即使密码或邮箱不一致)。

修复方案:

  • 彻底重置数据库:执行docker-compose down -v删除卷,再重新启动容器,让Keyrock重新初始化管理员账号。
  • 手动修改数据库密码:
    1. 进入MySQL容器:docker exec -it <你的mysql容器名称> mysql -uroot -pidm
    2. 切换到idm库:use idm;
    3. 更新密码:UPDATE user SET password = SHA2('1234', 256) WHERE email = 'admin@test.com';
    4. 刷新权限:FLUSH PRIVILEGES;

3. Keyrock端口配置错误

你的docker-compose中,Keyrock容器内部服务端口是3000,但IDM_PORT设置为3005(宿主机映射端口),这会导致Keyrock内部逻辑出现异常。

修复:将IDM_PORT修改为容器内部端口3000:

environment:
    - IDM_DB_HOST=mysql
    - IDM_HOST=http://localhost:3005
    - IDM_PORT=3000  # 此处改为3000
    - IDM_DB_USER=root
    - IDM_ADMIN_USER=admin
    - IDM_ADMIN_EMAIL=admin@test.com
    - IDM_ADMIN_PASS=1234

4. MySQL未就绪时Keyrock提前启动

虽然配置了depends_on,但MySQL可能还未完成初始化,Keyrock就启动了,导致管理员账号未成功创建。

修复:给MySQL添加健康检查,确保其就绪后再启动Keyrock:

services:
  mysql:
    # ... 其他配置不变
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pidm"]
      interval: 5s
      timeout: 5s
      retries: 5

  keyrock:
    # ... 其他配置不变
    depends_on:
      mysql:
        condition: service_healthy

内容的提问来源于stack exchange,提问作者Νικόλας Καστρινάκης

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:01:27