簡體   English   中英

將 Eclipse 連接到 Docker 容器以進行遠程調試

[英]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 應用程序可以通過以下方式遠程調試

  1. 為容器中的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 ,應用程序將正常啟動,允許遠程調試器稍后連接。

  2. 連接到進程,例如通過您的 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 中連接遠程調試,您可以按照以下步驟操作:

  1. 將這些行放在您的應用程序 Dockerfile 中

    # 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
  1. 僅適用於 Linux,啟動您的 docker 應用程序並搜索網絡,在我的情況下為ecs-core_default
$ docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    e63bb0decc92        bridge              bridge              local
    94aefcdbb5f3        ecs-core_default    bridge              local
  1. 僅適用於 Linux,現在使用以下命令檢查您的應用程序的 IP,


    $ 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. 僅適用於 Linux,從容器“IPv4Address”復制 IP 地址:“172.18.0.6/16”即172.18.0.6

  2. 僅對於 Windows 10,要查找 IP,請轉到控制面板 -> 網絡和 Internet -> 查看網絡狀態和任務 -> 更改適配器設置 -> 查找 vEthernet。 打開屬性轉到網絡選項卡,選擇 TCP/IPv4,然后單擊屬性按鈕並復制 IP。 Windows Docker IPv4

  3. 在 Eclipse 中,運行 -> 調試配置,使用 IP(屏幕截圖顯示 Linux 的 IPv4,對於 Windows,它將是 172.26.48.1)和暴露的端口(即 7074)。 在此處輸入圖片說明

享受!!

這是通過用我的實際 IP 地址替換localhost來解決的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM