go delve 远程调试不适用于 docker "network_mode: host"

我正在尝试在带有 VSCode 的 docker 容器中使用 dlv 运行远程调试。当我指定 docker-compose 标志network_mode: host而不是特定端口时,问题就开始了(由于使用 MQTT,这是必需的)。这会导致 VSCode 抛出以下错误:“无法继续:“错误:连接 ENCONNREFUSED ...””


.vscode/launch.json


{

"version": "0.2.0",

"configurations": [

    {

        "name": "Remote Docker",

        "type": "go",

        "request": "attach",

        "mode": "remote",

        "remotePath":"/go/src/work/cmd/mapper",

        "port": 2345,

        // "host": "127.0.0.1",

        "cwd": "${workspaceFolder}/src/cmd/mapper",

        "args": [],

        "trace" : "verbose",

        "env" : {}

    },

]

}

码头工人-compose.yml


version: "3.4"

services:

  golang:

    container_name: golang

    image: gotestdlv:latest

    privileged: true

    volumes:

      - ./src/:/go/src/work/

    network_mode: host

    # ports:

      # - 2345:2345 # debug port


PIPIONE
浏览 77回答 1
1回答

温温酱

它不适合您的原因可能有很多。其中有:主机网络驱动程序仅适用于 Linux 主机,因此如果您使用 Docker for Mac、Docker for Windows 或 Docker Enterprise Edition,它将无法正常工作。该端口2345可能已在您的计算机上使用,并且该delve进程可能无法绑定它。连接到会话时,您可能使用了错误的主机名(您的代码段显示127.0.0.1但它已被注释掉,而且我不知道在未提供 IP 时它选择了什么 IP)。但是,我不确定您为什么要尝试使用主机网络模式,因为它通常对两个主要用例很有用:当 docker 容器需要绑定大量端口(数百个或数千个端口),并且在运行 Docker 群时可以很方便,只要服务在群中没有冲突的端口。在我看来,这些案例中的任何一个都与您描述的情况无关,所以即使这不是您最初的问题,我建议您寻找其他解决方案来解决您试图解决的问题使用主机联网模式。
打开App,查看更多内容
随时随地看视频慕课网APP