Reputation: 2578
I'm trying to connect eclipse to a docker container I have running but I am having trouble.
My docker run command is as follows:
docker run --rm -it -p 8000:8000 -p=8668:8080 -p 8010:8009 -p 8443:8443 \
--name myContainer -h theContainer -e JVM_ROUTE=myContainer1 myContainer:qa
In eclipse, I'm connecting with localhost
as the host, and 8000
as the port. I go to Run->Debug Configurations->Remote Java Application, and I've created a new debug configuration.
When I click apply, then debug, I get a pop up error message Failed to connect to remote VM.
What else do I need to do to get remote debugging working properly?
Upvotes: 8
Views: 17293
Reputation: 1723
OS: Ubuntu 18 / Windows 10
Java: OpenJdk 12
Docker Container: Sprint boot application
To connect Remote Debug in Eclipse you can follow these steps:
# For Windows Machine comment EXPOSE 7074 and add it to docker-compose.yml
EXPOSE 7074
ENV DEBUG_INFO="-Xdebug -Xrunjdwp:transport=dt_socket,address=0.0.0.0:7074,server=y,suspend=n"
ENTRYPOINT [ "sh", "-c", "java ${DEBUG_INFO} -Dspring.profiles.active=docker -jar /pharmacy-service.jar" ]
For Windows, add ports in docker-compose.yml
bank-service:
image: ....
environment:
...
ports:
- 9097:9097
- 7074:7074
$ docker network ls NETWORK ID NAME DRIVER SCOPE e63bb0decc92 bridge bridge local 94aefcdbb5f3 ecs-core_default bridge local
$ docker network inspect ecs-core_default
[
{
"Name": "ecs-core_default",
.....
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
.....
"Containers": {
"29bebdc31d6bf2057ed31074407c780cc718396ca49f58e766e098fceaa41a41": {
"Name": "ecs-core_pharmacy-service_1",
"EndpointID": "fadc9b40bfed1d4b2104b96fb6930bda47928256092c268aa4cb67407c2c1661",
"MacAddress": "02:42:ac:12:00:06",
"IPv4Address": "172.18.0.6/16",
"IPv6Address": ""
}
}
.....
}
]
For Linux only, copy IP address from Containers "IPv4Address": "172.18.0.6/16" i.e. 172.18.0.6
For Windows 10 only, to find IP goto Control Panel -> Network and Internet -> View Network Status and task -> Change adapter settings -> Look for vEthernet. Open Properties goto Networking tab, select TCP/IPv4 and then click Properties button and copy IP.
In Eclipse, Run -> Debug Configuration, use IP (screenshot shows IPv4 for Linux, for Windows it will be 172.26.48.1) and exposed port (i.e 7074).
Enjoy!!
Upvotes: 2
Reputation: 2578
This was solved by replacing localhost
with my actual IP address.
Upvotes: 1
Reputation: 3830
A java application running in a docker container can be remotely debugged by
Enabling JDWP for the java process in the container, e.g.
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y [...]
or using the JAVA_OPTS environment variable
JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y"
Note that suspend=y
will prevent the application from starting until a remote debugger is attached to the JVM. If suspend=n
is used, the application will start as normal allowing a remote debugger to connect at a later time.
Connecting to the process, e.g. through your IDE, using the port specified in the address=<port>
settings above, and importantly the ip address of the docker host which, unless you are running on linux, is probably not localhost
. If you are using docker-machine
, the docker host ip can be displayed using docker-machine ip
, e.g.
$ docker-machine ip
192.168.99.100
Upvotes: 4