Keycloak V21 Docker 容器健康检查失败

din*_*ngo 2 docker keycloak

使用 Docker 运行的 Keycloak 从 v20 升级到 v21 时遇到问题。自更新以来,Docker 容器运行状况检查失败,我无法确定原因。

我已阅读迁移文档,但无法找到会破坏运行状况检查的更改。

我的所有其他配置都保持不变,并且都适用于 v20。这让我相信这绝对是 v21 中的一个重大变化。

din*_*ngo 7

似乎 Keycloak v21 使用了缩小的图像,其中不再包含curl命令。这之前用于对本地主机执行健康检查。

我发现这个关于这个问题的讨论(https://github.com/keycloak/keycloak/issues/17273)。如果有兴趣的话,它可以提供对这些变化的更多了解。

用户提供了一个 bash 脚本来执行类似的健康检查:

#!/bin/bash
exec 3<>/dev/tcp/localhost/8080

echo -e "GET /auth/health/ready HTTP/1.1\nhost: localhost:8080\n" >&3

timeout --preserve-status 1 cat <&3 | grep -m 1 status | grep -m 1 UP
ERROR=$?

exec 3<&-
exec 3>&-

exit $ERROR
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  • 这只适用于 Keycloak localhost 上的 http 端点
  • 健康检查 URL 应匹配(请注意包含 /auth/ 以实现向后兼容性。在更高版本中,如果未包含在环境变量中,则可以省略 /auth/)。
  • 需要将 bash 脚本复制到 Docker 映像中(如果使用 Docker)并在运行状况检查中引用。

如果您在 ECS 上启动它,则任务定义的运行状况检查块的定义应类似于以下内容:

"healthCheck": {
   "command": [
       "CMD-SHELL",
       "bash /complete/path/to/healthcheck/script"
    ],
    "interval": **,
    "timeout": **,
    "retries": **,
    "startPeriod": **
 }
Run Code Online (Sandbox Code Playgroud)