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
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.
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
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 Expose
port 8000 dans le fichier Docker.
J'espère que cela t'aides.
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