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 容器