Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to debug an application running in Docker with IntelliJ?

I have a Jetty application running in docker. I would like to debug this application using my local IntelliJ. I am on v 14.1, so I have installed the Docker Integration plugin.

Under Clouds, I am using the default values that showed up when I click on the '+'. IntelliJ docs say this should be OK. Here the

API URL: http://127.0.0.1:2376 Certificates folder: <empty> 

I'm not sure what these are used for, so I dont know if these values are right.

Under Run/Debug configurations, I am using Docker Deployment, and the following values:

Deployment: Docker Image Image ID: The docker image ID  Container name: The name of the container 

When I try to run this, I get javax.ws.rs.ProcessingException: org.apache.http.conn.HttpHostConnectException: Connect to http://127.0.0.1:2376 [/127.0.0.1] failed: Connection refused

Obviously the API URL value I am using is incorrect. Any suggestions on what that value should be?

My debugging options are:

 -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n -Djava.compiler=NONE 
like image 368
Somaiah Kumbera Avatar asked Dec 08 '15 14:12

Somaiah Kumbera


People also ask

How do I debug an application in IntelliJ?

Run the program in debug modeClick the Run icon in the gutter, then select Modify Run Configuration. Enter arguments in the Program arguments field. Click the Run button near the main method. From the menu, select Debug.

Can you debug in Docker?

The Docker extension provides a docker debug configuration provider that manages how VS Code will launch an application and/or attach a debugger to the application in a running Docker container.


2 Answers

Sheesh Never mind. I didnt really need the Docker Integration plugin. Seems like that is more for deployment and management of Docker directly through Intellij than for debugging.

To debug my jetty app running inside my docker container, I simply remote debugged:

Run | Edit configurations | + | Remote

The command line args were already OK since I used the default remote debugging options. I only needed to change the Host settings. Here I used the hostname I had set within the docker container

like image 154
Somaiah Kumbera Avatar answered Sep 23 '22 08:09

Somaiah Kumbera


In Java 8 the JDK supports a JAVA_TOOL_OPTIONS environment variable so to enable the debugger for any Java application you can add the following parameters to your docker run command:

-p 8000:8000 -e "JAVA_TOOL_OPTIONS=\"-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n\"" 

Then start a remote debug session connecting to localhost:8000.

like image 25
Nathan Niesen Avatar answered Sep 22 '22 08:09

Nathan Niesen