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

p4tfgftt  于 2023-08-06  发布在  其他
关注(0)|答案(5)|浏览(164)

我最近将Keycloak升级到版本9,当在Docker中运行时,我在连接远程调试器时遇到了问题。我怀疑这与Keycloak对Java 9+的底层升级有关。
我得到的错误是:
第一个月
我在Docker中正确Map了我的端口(我可以运行Keycloak版本7,它连接得很好)。

ut6juiuv

ut6juiuv1#

这种方法取决于你使用的是standalone.sh(或者.bat)还是docker镜像。
如果您使用的是standalone.sh,则可以使用--debug选项,如standalone.sh -h中所述:

standalone.sh --debug '*:8000'

字符串
(the *允许从任何主机访问。普通--debug 8000将只允许从本地主机访问)
对于docker镜像,这将是documented方法from version 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


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

gcuhipw9

gcuhipw92#

事实证明,Java 9在调试方面引入了安全增强。此处的信息:https://stackoverflow.com/a/60090750/2117355
在我的Keycloak docker-compose服务定义中,我能够在environment下添加:
DEBUG_PORT: "*:8787"
这解决了问题。我现在可以调试了。

mbskvtky

mbskvtky3#

Keycloak版本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
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1234

  • 注意:**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

np8igboo

np8igboo4#

您可以通过使用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

t98cgbkg

t98cgbkg5#

这个答案与docker无关,只是想帮助任何需要这个的人

对于keycloak 22.0.1,我使用intellij调试我的自定义SPI(我将其作为jar文件放在/provider中),然后在本地启动keycloak,并进行远程调试。
1.在C:\YourPath\keycloak-22.0.1\bin>内运行kc.bat start-dev --http-relative-path=/auth --debug,然后将显示类似于Listening for transport dt_socket at address: 63506的内容
1.打开intellij,Ctrl+Alt+F5打开attach to process(或运行|附加到进程),选择地址,例如63506
1.然后你就可以进行远程调试了!首先设置一些断点,然后打开localhost:8080并执行您的操作

相关问题