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.
[2] https://stackoverflow.com/questions/36757784/jmx-and-debugging-on-tomcat-inside-docker