web-dev-qa-db-fra.com

déboguer Spring-Boot dans le menu fixe

Pour une raison quelconque, j'ai des problèmes pour connecter le débogage distant à une application Spring-Boot s'exécutant dans docker. Je lance l'application Java avec:

Java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar app.jar

Pour docker, j'expose ces ports sur docker-compose:

ports:
- "8080:8080"
- "8000:8000"

Cependant, le débogueur ne peut pas se connecter sur le port 8000. Cela fonctionne lorsque je lance le serveur localement mais pas dans le menu fixe. Une idée pourquoi?

Docker ps sortie:

CONTAINER ID        IMAGE                       COMMAND                CREATED               STATUS              PORTS                                            NAMES
0d17e6851807        pocmanager_manager:latest   "/bin/sh -c 'Java -D   3 seconds ago       Up 2 seconds        0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp   pocmanager_manager_1   
35ed2e2c32bc        redis:latest                "/entrypoint.sh redi   14 seconds ago      Up 13 seconds       0.0.0.0:6379->6379/tcp                           pocmanager_redis_1
12
Jarle Hansen

je dois comprendre que dans dockerFile, la commande Expose ne fait que la moitié du travail, ce qui signifie que seul le port situé à l'intérieur du docker est exposé, mais pas à l'extérieur.

 enter image description here

Le débogage fonctionne avec Java_OPTS et le débogage distant, le fichier docker ressemble à ceci:

FROM frolvlad/Alpine-oraclejdk8:slim
VOLUME /tmp
ADD gs-spring-boot-docker-0.1.0.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT [ "sh", "-c", "Java $Java_OPTS -jar /app.jar" ]

et en exécutant cette commande:

docker run -e "Java_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y" -p 8080:8080 -p 8000:8000 -t springio/gs-spring-boot-docker

Comme vous pouvez le constater, vous devez exposer le port de débogage pendant l'exécution, dans mon cas (Eclipse) 8000

 enter image description here

 enter image description here

7
nekperu15739

Salut j'ai rencontré le même problème.

J'ai ajouté ce qui suit au point d'entrée dans le fichier Docker:

"-agentlib: jdwp = transport = dt_socket, adresse = 8000, serveur = y, suspendre = n"

Maintenant ça ressemble à ça:

FROM Java:8
VOLUME /tmp
ADD realName*.jar app.jar
EXPOSE 4786
RUN sh -c 'touch /app.jar'
ENTRYPOINT
["Java","-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Je n'ai pas Exposeport 8000 dans le fichier Docker.

J'espère que cela t'aides.

7
SWiggels

Je pense que la raison en est peut-être que votre configuration Virtual Box VM ne canalise pas le port de débogage vers la machine hôte.

Vérifiez ce lien https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

Fondamentalement, dans votre cas, vous devez commander Invite et exécuter

VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8000,tcp,,8000,,8000";

Note: Assurez-vous que VBoxManage est dans votre PATH

0
Palanivelrajan