我试图将eclipse连接到我运行的docker容器但是我遇到了麻烦。
我的docker run命令如下:
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
在eclipse中,我与localhost
作为主机连接,8000
作为端口。我转到Run-> Debug Configurations->远程Java应用程序,并且我已经创建了一个新的调试配置。
当我点击apply,然后调试时,我收到一条弹出错误消息Failed to connect to remote VM.
我还需要做些什么才能使远程调试正常工作?
答案 0 :(得分:1)
操作系统: Ubuntu 18
Java: OpenJdk 12
Docker Container: Sprint引导应用程序
要在Eclipse中连接远程调试,您可以按照以下步骤操作:
EXPOSE 7074
# For Windows Machine [NOT TESTED]
# ENV DEBUG_INFO="-Xdebug -Xrunjdwp:transport=dt_shmem,address=debug,server=y,suspend=n"
# For Linux Machine
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" ]
$ 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": ""
}
}
.....
}
]
享受!
答案 1 :(得分:0)
可以通过
远程调试在docker容器中运行的java应用程序为容器中的java进程启用JDWP,例如
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y [...]
或使用JAVA_OPTS环境变量
JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y"
请注意,suspend=y
将阻止应用程序启动,直到将远程调试程序连接到JVM。如果使用suspend=n
,应用程序将正常启动,允许远程调试器稍后连接。
连接到流程,例如通过IDE,使用上面address=<port>
设置中指定的端口,重要的是 docker host 的ip地址,除非你在linux上运行,否则可能不是{{1} }。如果您使用的是localhost
,则可以使用docker-machine
显示docker host ip,例如
docker-machine ip
答案 2 :(得分:0)
通过将localhost
替换为我的实际IP地址来解决这个问题。