如何远程调试附加版本 > 8 中的 Keycloak

Mar*_*ark 8 debugging keycloak

我最近将 Keycloak 升级到版本 9,在 Docker 中运行时,我在附加远程调试器时遇到问题。我怀疑这与Keycloak底层升级到Java 9+有关。

我得到的错误是:

handshake failed - connection prematurally closed

我在 Docker 中正确映射了端口(我可以运行 Keycloak 版本 7 并且它连接得很好)。

Pet*_*rch 9

该方法取决于您是否使用standalone.sh(或可能是 .bat)或 docker 映像。

如果您使用的是standalone.sh,则可以使用该--debug选项,记录在standalone.sh -h

standalone.sh --debug '*:8000'
Run Code Online (Sandbox Code Playgroud)

*允许从任何主机访问。Plain--debug 8000仅允许从本地主机访问)

对于 docker 镜像,这将是从版本 12开始的记录方法,并且它至少可以从 Keycloak 11.0.2 开始工作:

$ git diff
diff --git a/docker-compose/keycloak-standalone/docker-compose.yml b/docker-compose/keycloak-standalone/docker-compose.yml
index fcf3a52..93b7209 100644
--- a/docker-compose/keycloak-standalone/docker-compose.yml
+++ b/docker-compose/keycloak-standalone/docker-compose.yml
@@ -11,11 +11,14 @@ services:
       environment:
         KEYCLOAK_USER: admin
         KEYCLOAK_PASSWORD: admin
+        DEBUG: "true"
+        DEBUG_PORT: "*:8000"
       ports:
         - 8080:8080
+        - 8000:8000
       volumes:
         - data:/opt/jboss/keycloak/standalone/data
Run Code Online (Sandbox Code Playgroud)

(同样,这*是允许从任何主机进行访问。)


Mar*_*ark 5

事实证明,Java 9 引入了调试方面的安全增强功能。信息在这里:https ://stackoverflow.com/a/60090750/2117355

在我的 Keycloak docker-compose 服务定义中,我可以添加以下内容environment

DEBUG_PORT: "*:8787"

这解决了问题。我现在可以调试了。