如何dubug一个在docker运行的node程序?

253 阅读1分钟

下面是一个vscode launch.json的配置文件

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Attach to Docker",
        "port": 9229,
        "request": "attach",
        "restart": true,
        "address": "localhost",
        "localRoot": "${workspaceFolder}",
        "remoteRoot": "/backend",
        "type": "node"
      }
    ]
  }

其中: port:9229是程序debug的端口。
在docker配置文件中,需要将9229端口对外开放
remoteRoot:是docker容器里面代码存放的位置

    ports:
      - 3500:3500
      - 9229:9229
    working_dir: /backend

有一个关键的点是:
默认的debug ip地址为127.0.0.1,即本机ip。
但是在docker容器中,本机ip只对自己生效。
所以在启动debug的时候,需要将地址指定为:0.0.0.0
以下是nest程序的示例:

"start:debug": "nest start --debug 0.0.0.0 9229 --watch",

127.0.0.1 和 localhost 一样,都是只本机地址。
0.0.0.0 是路由表的默认路由,表示整个网络,即网络内的所有主机,而非某一个主机。
这里如果用默认的 localhost,那服务只在容器内生效,要指定 0.0.0.0 才行。

此时,点击debug就正常工作了。
可以在docker的日志里面看到:

image.png 就说明连接成功了。