2016-04-21 8 views
3

Ich versuche, IntelliJ für eine Verbindung zu einer Tomcat-Instanz in einem Docker-Container einzurichten. Ich möchte in der Lage sein, Remote-Debugging zu verwenden und auch remote mit JMX zu implementieren.JMX und Debugging auf Tomcat in Docker

kann ich mit catalina.sh jpda run Remote-Debugging unter Verwendung der Umgebungsvariablen

JPDA_ADDRESS=8000 
JPDA_TRANSPORT=dt_socket 

und durch das Starten von Tomcat aktivieren, so Remote-Debugging funktioniert ohne Probleme.

Ich kann dies auch alternativ tun mit

CATALINA_OPTS='-agentlib:jdwp=transport=dt_socket,address=8000,suspend=n,server=y' 

und dann brauche ich nicht catalina.sh jpda run

Egal zu verwenden, was ich tue, kann ich JMX nicht arbeiten lernen. Ich habe überprüft, dass ich catalina-jmx-remote.jar in/usr/local/tomcat/lib `habe.

Ich habe versucht, CATALINA_OPTS und JAVA_OPTS zu

Einstellung
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.port=1099 
-Dcom.sun.management.jmxremote.rmi.port=1099 
-Djava.rmi.server.hostname=192.168.99.100 
-Dcom.sun.management.jmxremote.ssl=false 

ich vergewissert haben, dass 192.168.99.100 die IP meines Docker Maschine ist. Ich habe versucht, Verbindung zu JMX mit VisualJM und IntelliJ herzustellen, es funktioniert nicht. Ich habe überprüft, dass der Port 1099 offen und verfügbar vom Host ist.

Tomcat empfängt die JMX args

20-Apr-2016 23:50:14.019 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Djava.rmi.server.hostname=192.168.99.100 -Dcom.sun.management.jmxremote.ssl=false 

Warum kann ich nicht JMX zu arbeiten? Es gibt keine Informationen in irgendwelchen Protokollen und das wird nicht funktionieren, egal was ich versuche.

Edit: lsof -i :1099 zeigt nichts läuft an diesem Port

ich unter Mac OS X leite Es ist eine Docker-Maschine, aber ich glaube, Docker virualbox auf dem Mac verwendet, weil es keine Container laufen nativ kann. Ich habe den Port zugeordnet. docker ps zeigt 0.0.0.0:1099->1099/tcp, 0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp. Ports 8080 und 8000 arbeiten so 1099 sollte auch korrekt zugeordnet werden.

+0

Wenn Sie die Docker-Container und läuft 'hostname -i' ssh auf (in Ihrem Container das ist möglich unter der Annahme,), was ist das Ergebnis? –

+0

@EngineerDollery Das Ergebnis ist 172.17.0.3, aber ich nahm an, dass ich die IP der Maschine und nicht den Container verwenden sollte. Wenn ich '192.168.99.100' ping (die IP des Docker-Rechners), bekomme ich eine Antwort. Wenn ich ping '172.17.0.3', 100% Paketverlust – DontTurnAround

+0

Haben Sie das gelesen ?: http://stackoverflow.com/questions/31257968/how-to-access-jmx-interface-in-docker-from-outside oder das ?: http://stackoverflow.com/questions/29958421/access-tomcat-running-in-docker-container-by-jmx –

Antwort

1

Ich war in der Lage zu verbinden, wenn ich 0.0.0.0 für jmxremote.host und server.hostname verwendet

HOST=0.0.0.0 
    java -Xmn100M -XX:+PrintGCDetails -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -Xmx384M $JAVA_OPTS\ 
    -Dcom.sun.management.config.file=/opt/app/management.properties \ 
    -Djava.util.logging.config.file=/opt/app/logging.properties \ 
    -Dcom.sun.management.jmxremote.port=$JMX_PORT \ 
    -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT \ 
    -Dcom.sun.management.jmxremote.host=$HOST \ 
    -Djava.rmi.server.hostname=$HOST \ 
    -jar /opt/app/app.jar 
+0

Endlich! Ich wünschte, ich hätte es früher gefunden und nicht, nachdem ich den ganzen Tag damit verbracht habe, verflixte Arbeit zu machen. Vielen Dank. –

Verwandte Themen