node.js - 使用 Visual Studio Code 在 Docker 中远程调试 NodeJS

标签 node.js debugging docker visual-studio-code

我想为我的应用程序使用官方 node docker 镜像。但是我无法让远程调试器在主机上工作。我正在使用 Visual Studio Code 连接到远程调试器。

奇怪的是使用非官方图像 cusspvz/node 远程调试器工作正常。

当我针对容器的 cusspvz/node 实例运行 docker log 时,我得到以下输出:

监听 [::]:5858

然而,当我针对容器的 node 实例运行 docker log 时,我得到:

监听 127.0.0.1:5858 的调试器

这让我相信调试器正在监听错误的 IP 地址(应该是通配符而不是本地主机?)

我试过内置调试器和 nodemon。不幸的是,我无法让 node-inspector 工作,因为它无法安装(似乎构建失败了)。

这是我的 Dockerfile:

FROM node
WORKDIR /scraper
EXPOSE 5858
ENTRYPOINT ["/bin/bash", "-c", "if [ -z \"$REMOTE_DEBUGGING\" ]; then node --debug index.js; else node --debug-brk index.js; fi"]
COPY . /scraper
RUN npm install

我用 docker-compose 启动容器,使用这个 YML 文件:

version: '2'

services:
 alt.nphotos.imagescraper:
  container_name: nscraper
  hostname: nscraper
  build:
   context: ./ALT.NPhotos.ImageScraper
   dockerfile: Dockerfile.debug
  environment:
  - REMOTE_DEBUGGING=1
  - AMQP_CONNECTIONSTRING=amqp://guest:guest@nqueue
  ports:
  - "5858:5858"

有什么想法吗? -TIA!

最佳答案

默认情况下,node.js(及其背后的 v8)始终使用 127.0.0.1 作为调试器。我查看了 cusspvz/node,但在任何地方都找不到它是如何像那样公开调试器的。

过去很难更改此配置,但现在您只需使用带有显式主机的调试选项即可:

node --debug=[::]:5858 test.js
Debugger listening on [::]:5858

关于node.js - 使用 Visual Studio Code 在 Docker 中远程调试 NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376231/

相关文章:

vb6 - 如何在Outlook属性页OCX上使用VB6调试器?

javascript - 访问使用 window.open 打开的窗口的内容

node.js - 在运行的 Node 应用程序上启动调试 session 并附加 Node 调试器?

java - 在远程调试中暂停 Spring Boot Java 应用程序时,ECS 代理停止并重新启动 Docker 容器

javascript - Mongoose/MongoDB - 更新子文档不起作用

javascript - 带有 Lambda 的 Graphql Yaga Playground - "Server cannot be reached"

docker - dotnet 测试未在 docker 中使用标志 --no-build 运行

Vagrant + Docker 上的 Symfony 2 应用程序

node.js - Telegraf 和 Heroku 未在 webhook [nodejs] 上发送第一个回复

node.js - Hyperledger Fabric 1.2 功能错误