One problem when trying to debug a Java application running inside a Docker container is:
You can't expose an additional port when re(starting) a Docker container.
Here are the steps I used to create a remote debugging session for Planets:
In our scenario we can't simply override the Dockerfile CMD or pass an environment variable JAVA_OPTS
to enable remote debugging.
So we have to "enter" the container with exec and add the JAVA_OPTS
to the start script there:
$ docker exec -it planets-staging /bin/bash
# vi eclipse.ini
<append JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n">
Next we create a snapshot of the container and stop it afterwards.
$ docker commit planets-staging debug/staging-snapshot
$ docker stop planets-staging
Now we can expose an additional port for remote debugging when we run the snapshot:
$ docker run -i -p 80:80 -p 8000:8000 debug/staging-snapshot
Just for completeness in case you have a scenario where you can pass JAVA_OPTS
as environment to your start script.
$ docker run -i -p 80:80 \
-e "JAVA_OPTS=\"-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n\"" \
-p 8000:8000 debug/staging-snapshot
Happy remote debugging!