J'ai récemment mis à niveau Keycloak vers la version 9, et lors de l'exécution dans Docker, j'ai du mal à attacher un débogueur distant. Je soupçonne que cela a à voir avec la mise à niveau sous-jacente de Keycloak vers Java 9+.
L'erreur que j'obtiens est:
handshake failed - connection prematurally closed
Mes ports sont correctement mappés dans Docker (je peux exécuter Keycloak version 7 et il se connecte très bien).
4 Réponses :
En fait, Java 9 a introduit une amélioration de la sécurité en ce qui concerne le débogage. Informations ici: https://stackoverflow.com/a/60090750/2117355
Dans ma définition de service keycloak docker-compose, j'ai pu ajouter sous environment
:
DEBUG_PORT: "*:8787"
Et cela a résolu le problème. Je suis maintenant capable de déboguer.
Pour Keycloak version 7
J'utilise cette commande pour exécuter le conteneur docker afin d'activer le débogage au port 1234
-server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
Connexion à IntelliJ à l'aide de la configuration à distance
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1234
* Remarque: La valeur par défaut de JAVA_OPTS
est ci-dessous, je l'ai donc JAVA_OPTS
avec la configuration ci-dessus
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
Avec Keycloak 11.0.2, voici ce que j'ai dû changer dans mon docker-compose.yaml:
$ 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: "*:8787" # If DANLON_GOOGLE_TAG_ID and/or DANLON_HOTJAR_ID are set, tracking code is enabled: # DANLON_GOOGLE_TAG_ID: GTM-MPTZ8V9 # DANLON_HOTJAR_ID: 692647 ports: # Default to port 8180 - ${PORT-8180}:8080 + - 8787:8787 volumes: - data:/opt/jboss/keycloak/standalone/data
C'est l'approche qui sera documentée à partir de la version 12. Voir KEYCLOAK-16506 README: docker envs pour le débogueur Java par pmorch · Pull Request # 306 · keycloak / keycloak-containers
Vous pouvez remplacer les paramètres de débogage en créant votre propre image à l'aide de Dockerfile
Dockerfile:
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
console:
FROM jboss/keycloak:latest ENV DEBUG true ENV DEBUG_PORT *:8787 EXPOSE 8080 8443 9990 8787 ENTRYPOINT ${JBOSS_HOME}/../tools/docker-entrypoint.sh