VS Code 未达到在 Docker 容器中运行的 Node 应用程序的断点

col*_*rtz 5 node.js docker nodemon babeljs vscode-debugger

概括

我在 docker 容器内运行节点应用程序无法让 VS 代码调试器命中断点。

码头工人设置

docker 容器公开端口 5859。在容器内,节点应用程序使用以下命令运行:

nodemon -L --watch src --exec babel-node src/server.js -- --inspect=0.0.0.0:5859 --nolazy

它报告调试器正在侦听:

[nodemon] 1.19.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: /app/src/**/*
[nodemon] starting `babel-node src/server.js --inspect=0.0.0.0:5859 --nolazy`
Debugger listening on ws://0.0.0.0:5859/5939f6b6-5ade-4ce5-9694-7df5f5b8385b
For help, see: https://nodejs.org/en/docs/inspector
Run Code Online (Sandbox Code Playgroud)

VS 代码设置

当我在 VS Code 中启动调试配置文件时,它似乎附加了。以下是正在运行的 docker 容器的日志中的一行。 在此处输入图片说明 但是,当我设置断点时,没有遇到断点。这是 babel 节点问题吗?是否有任何建议的路径可以让节点调试工作babel-node

在此处输入图片说明

我的 VS Code 调试配置:

  {
        "type": "node",
        "request": "attach",
        "name": "Docker: GraphQL",
        "port": 5859,
        "protocol": "inspector",
        "restart": true,
        "remoteRoot": "/app",
        "localRoot": "${workspaceFolder}"
    }
Run Code Online (Sandbox Code Playgroud)

col*_*rtz 3

我无法让它与 nodemon 一起使用,但修改我的.babelrc文件以包含内联源映射会触发 VS code 以命中我设置的断点。我的.babelrc文件如下所示:

{
    "env": {
        "production": {
            "presets": [
                ["es2015", {"modules": false}],
                "stage-1"
            ]
        },
        "development": {
            "presets": [
                ["es2015"],
                "stage-1"
            ], 
            "sourceMaps": "inline",
            "retainLines": true
        }    }
}
Run Code Online (Sandbox Code Playgroud)

以及docker中调用的对应脚本package.json。端口 5859 在 docker-compose 文件中公开。

"start:docker": "babel-node src/server.js --inspect=0.0.0.0:5859 --nolazy",
Run Code Online (Sandbox Code Playgroud)