Debugging 如何在版本中远程调试附加KeyClope>;8.

Debugging 如何在版本中远程调试附加KeyClope>;8.,debugging,keycloak,Debugging,Keycloak,我最近将KeyClope升级到了版本9,在Docker中运行时,我在连接远程调试器时遇到了问题。我怀疑这与keydape对java9+的底层升级有关 我得到的错误是: 握手失败-连接过早关闭 我在Docker中正确映射了我的端口(我可以运行KeyClope版本7,并且连接得很好)。事实证明,Java 9在调试方面引入了安全增强功能。资料如下: 在我的KeyClope docker compose服务定义中,我能够在环境下添加: 调试端口:“*:8787” 这就解决了问题。我现在可以调试了。对于K

我最近将KeyClope升级到了版本9,在Docker中运行时,我在连接远程调试器时遇到了问题。我怀疑这与keydape对java9+的底层升级有关

我得到的错误是:

握手失败-连接过早关闭


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

事实证明,Java 9在调试方面引入了安全增强功能。资料如下:

在我的KeyClope docker compose服务定义中,我能够在
环境下添加:

调试端口:“*:8787”


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

对于KeyClope 7版

我正在使用此命令运行docker容器,以便在端口
1234

docker run -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin 
-e JAVA_OPTS="-server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m 
   -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman 
   -Djava.awt.headless=true 
   -agentlib:jdwp=transport=dt_socket,address=1234,server=y,suspend=n" 
-p 8080:8080 -p 1234:1234 jboss/keycloak:7.0.0 
使用远程配置将其连接到IntelliJ

-server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m 
-Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman 
-Djava.awt.headless=true 
-agentlib:jdwp=transport=dt\u socket,server=y,suspend=n,address=1234

docker run -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin 
-e JAVA_OPTS="-server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m 
   -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman 
   -Djava.awt.headless=true 
   -agentlib:jdwp=transport=dt_socket,address=1234,server=y,suspend=n" 
-p 8080:8080 -p 1234:1234 jboss/keycloak:7.0.0 
*注意:JAVA\u OPTS的默认值如下所示,因此我用上述配置将其预先设置好

-server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m 
-Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman 
-Djava.awt.headless=true 

方法取决于您使用的是
standalone.sh
(或者.bat)还是docker映像

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

standalone.sh --debug '*:8000'
*
允许从任何主机访问。普通
--debug 8000
只允许从本地主机访问)

对于docker图像,这将是一种方法,它至少在KeyClope 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

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

您可以通过使用Dockerfile创建自己的映像来替换调试参数

Dockerfile:

FROM jboss/keycloak:latest
ENV DEBUG true
ENV DEBUG_PORT *:8787
EXPOSE 8080 8443 9990 8787
ENTRYPOINT ${JBOSS_HOME}/../tools/docker-entrypoint.sh
docker build -t local/debug-keycloack ..
docker run -p 8080:8080 -p 8443:8443 -p 9990:9990 -p 8787:8787 --name debug-keycloack local/debug-keycloack
控制台:

FROM jboss/keycloak:latest
ENV DEBUG true
ENV DEBUG_PORT *:8787
EXPOSE 8080 8443 9990 8787
ENTRYPOINT ${JBOSS_HOME}/../tools/docker-entrypoint.sh
docker build -t local/debug-keycloack ..
docker run -p 8080:8080 -p 8443:8443 -p 9990:9990 -p 8787:8787 --name debug-keycloack local/debug-keycloack

这是从第12版开始将要记录的方法。看到没有必要创建自己的形象…@PeterV.Mørch这只是一个选择。启用远程调试的另一种方法我很确定,至少从11.0.2开始,您还需要设置环境变量
DEBUG:“true”
。添加
DEFAULT\u MODULAR\u JVM\u选项
将比更新
JAVA\u选项更好
-e DEFAULT\u MODULAR\u JVM\u OPTIONS=“-Xdebug-Xrunjdwp:transport=dt\u socket,server=y,suspend=n,address=8000”