VS Code 未在 Docker 容器中为 Node 应用程序 运行 设置断点

VS Code not hitting breakpoints for Node app running in Docker Container

总结

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

Docker 设置

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

VS 代码设置

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

我的 VS Code 调试配置:

  {
        "type": "node",
        "request": "attach",
        "name": "Docker: GraphQL",
        "port": 5859,
        "protocol": "inspector",
        "restart": true,
        "remoteRoot": "/app",
        "localRoot": "${workspaceFolder}"
    }

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

{
    "env": {
        "production": {
            "presets": [
                ["es2015", {"modules": false}],
                "stage-1"
            ]
        },
        "development": {
            "presets": [
                ["es2015"],
                "stage-1"
            ], 
            "sourceMaps": "inline",
            "retainLines": true
        }    }
}

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

"start:docker": "babel-node src/server.js --inspect=0.0.0.0:5859 --nolazy",