El debug remoto es una práctica común para investigación de problemas de microservicios.
Si estas utilizando contenedores Docker Apache Tomcat o Apache TomEE, en la web puedes encontrar varias técnicas como lo son:

1. Extender una imagen oficial y personalizar[1]
2. Utilizar personalización extensiva de CATALINA_OPTS[2]

Sin embargo ambos enfoques requieren extra pasos aplicables para algunos escenarios. A continuación les comparto la forma más sencilla que he utilizado para poder hacer debug remoto en Apache Tomcat y Apache TomEE:

$
$ docker run -it -p 8080:8080 -p 8000:8000 -e CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000" tomcat:9.0.17-jre11

Anatomía de las opciones utilizadas:

  • docker run
    • Comando para encender un contendor docker
  • -it
    • Habilitando el modo interactivo del contenedor
  • -p 8080:8080 -p 8000:8000
    • Exponiendo los puertos accessibles desde el docker host
  • -e CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000"
    • Habilitacion de modo debug via CATALINA_OPTS con la configuración resumida y util para la mayoria de scenarios
  • tomcat:9.0.17-jre11
    • La imagen y label Docker del contenedor a ejecutar.
[1] https://github.com/docker-library/tomcat/issues/55
[2] https://stackoverflow.com/questions/36757784/jmx-and-debugging-on-tomcat-inside-docker

Cesar Hernandez

Cesar Hernandez

César Hernández is a Senior Software Engineer at Tomitribe with experience in Enterprise Java Applications. He is a Java Champion, Duke's Choice Award winner, Eclipse Committer, Open Source advocate, teacher, and public speaker. When César is away from a computer, he enjoys spending time with his family, traveling and playing music with the Java Community Band, The Null Pointers. Follow Cesar on twitter @CesarHgt
CesarHgt

Leave a Reply