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?
A java application running in a docker container can be remotely debugged by
Enabling JDWP for the java process in the container, eg
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, eg 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
, eg
$ docker-machine ip 192.168.99.100
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" ie 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 (ie 7074).
Enjoy!!
这是通过用我的实际 IP 地址替换localhost
来解决的。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.