VS Code 没有为在 Docker 容器中运行的 Node 应用程序打断点

Posted

技术标签:

【中文标题】VS Code 没有为在 Docker 容器中运行的 Node 应用程序打断点【英文标题】:VS Code not hitting breakpoints for Node app running in Docker Container 【发布时间】:2020-03-05 13:28:24 【问题描述】:

总结

我在 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"
    

【问题讨论】:

【参考方案1】:

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


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

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

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

【讨论】:

以上是关于VS Code 没有为在 Docker 容器中运行的 Node 应用程序打断点的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Docker 容器中运行 VS Code 的扩展开发主机来测试我的 vscode 扩展?

如何使用 VS Code 在 Docker 容器中远程调试 python 代码

使用 VS Code 调试在 Docker 容器中使用 ts-node 运行的 TypeScript 应用程序时,如何能够正确设置断点?

在 Ubuntu 上的 VS Code 中运行 NGC 容器

使用 debugpy 和 vs 代码在 docker 容器中调试 python 导致超时/连接被拒绝

在 Docker 容器内开发时启用 VS Code IntelliSense