You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

MacOS环境下Docker部署Keycloak执行exec命令失败求助

解决Docker部署Keycloak时exec执行add-user-keycloak.sh失败的问题

嘿,我来帮你排查这个问题~结合你描述的操作步骤,大概率是这几个原因导致的,对应解决办法如下:

1. 你选错了执行命令的容器

add-user-keycloak.shKeycloak容器专属的脚本,不是Postgres容器里的工具!你刚才只启动了Postgres,但还没启动Keycloak容器,或者误把Postgres容器当成了Keycloak容器来执行命令。

解决步骤:

  • 先启动Keycloak容器(记得配置Postgres连接参数):
docker run --name keycloak \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=your-password \
  -e DB_VENDOR=POSTGRES \
  -e DB_ADDR=postgres \
  -e DB_DATABASE=keycloak \
  -e DB_USER=keycloak \
  -e DB_PASSWORD=password \
  --link postgres:postgres \
  -p 8080:8080 \
  -d quay.io/keycloak/keycloak:latest start-dev

注:start-dev是开发环境启动模式,生产环境需要替换为正式启动命令。

  • docker ps查看Keycloak容器的名称/ID,比如容器名为keycloak,再针对它执行脚本:
docker exec keycloak keycloak/bin/add-user-keycloak.sh -u your-username -p your-password

2. Keycloak版本更新导致脚本被弃用

从Keycloak 17开始,官方切换到了Quarkus框架,旧的add-user-keycloak.sh已经被淘汰,改用kc.sh命令,甚至可以直接通过环境变量设置管理员账号,不用手动执行添加脚本。

更简便的方式:启动时直接设置管理员

启动Keycloak容器时,直接通过环境变量指定管理员账号密码,启动后就能直接登录:

docker run --name keycloak \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=your-strong-password \
  -e DB_VENDOR=POSTGRES \
  -e DB_ADDR=postgres \
  -e DB_DATABASE=keycloak \
  -e DB_USER=keycloak \
  -e DB_PASSWORD=password \
  -p 8080:8080 \
  -d quay.io/keycloak/keycloak:latest start-dev

之后访问http://localhost:8080/admin,用上述账号密码即可登录后台。

如果需要手动添加用户(比如离线场景)

用新版本的kc.sh命令:

docker exec -it keycloak /opt/keycloak/bin/kc.sh add-user --username your-user --password your-pass

执行完后重启Keycloak容器生效:

docker restart keycloak

3. 容器未完全启动就执行命令

有时候容器刚启动,内部服务还在初始化,这时候执行exec命令会失败。可以等10-20秒,或者用docker logs keycloak查看日志,确认出现类似“Keycloak is running in development mode”的提示后,再执行添加用户的命令。

4. 缺少终端分配参数

旧版本Keycloak可能需要加上-it参数分配终端,确保命令正常执行:

docker exec -it keycloak keycloak/bin/add-user-keycloak.sh -u your-username -p your-password

内容的提问来源于stack exchange,提问作者Harry Blue

火山引擎 最新活动