[英]Connecting Eclipse to Docker Container for Remote Debugging
我正在嘗試將 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
作為端口。 我轉到運行-> 調試配置-> 遠程 Java 應用程序,並創建了一個新的調試配置。
當我單擊應用,然后調試時,我收到一條彈出錯誤消息Failed to connect to remote VM.
我還需要做什么才能使遠程調試正常工作?
運行在 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>
設置中指定的address=<port>
,重要的是docker 主機的 ip 地址,除非您在 linux 上運行,否則可能不是localhost
。 如果您使用的是docker-machine
,則可以使用docker-machine ip
顯示 docker 主機docker-machine ip
,例如
$ docker-machine ip 192.168.99.100
操作系統: Ubuntu 18 / Windows 10
Java: OpenJdk 12
Docker 容器: Sprint 啟動應用程序
要在 Eclipse 中連接遠程調試,您可以按照以下步驟操作:
# 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" ]
對於 Windows,在 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": ""
}
}
.....
}
]
僅適用於 Linux,從容器“IPv4Address”復制 IP 地址:“172.18.0.6/16”即172.18.0.6
僅對於 Windows 10,要查找 IP,請轉到控制面板 -> 網絡和 Internet -> 查看網絡狀態和任務 -> 更改適配器設置 -> 查找 vEthernet。 打開屬性轉到網絡選項卡,選擇 TCP/IPv4,然后單擊屬性按鈕並復制 IP。
在 Eclipse 中,運行 -> 調試配置,使用 IP(屏幕截圖顯示 Linux 的 IPv4,對於 Windows,它將是 172.26.48.1)和暴露的端口(即 7074)。
享受!!
這是通過用我的實際 IP 地址替換localhost
來解決的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.