如何通过Google Clouddebugging在Docker容器中运行的Nodejs应用程序

我发现Google提供了一些关于如何在自定义运行时环境中运行Nodejs的指导。 一切似乎都很好,我正在设法运行gcloud preview app run .在本地机器上启动我的Nodejs应用gcloud preview app run .
正如我所看到的,它可能会创build一个Docker容器并在其中运行Nodejs程序。 我在说“可能” ,因为这是我第一次使用Docker,但是我经历了2年多的Nodejs开发。

所以我的问题是如何debugging(断点停止)我的Nodejs程序在Docker容器中运行时? 使用Chrome开发人员工具,或者如何设置Webstormdebuggingconfiguration,使其停止在断点上。 是否有可能configurationDocker如何启动节点,甚至通过gcloud内部Webstorm启动Docker,以确保debugging工作? 任何帮助或澄清表示赞赏。

请不要提供关于如何debuggingDocker容器之外的Nodejs应用程序的答案 – 我知道如何做得很好。

我很抱歉,但我只知道与节点检查员的解决scheme,我希望它可以帮助你:

  • 您可以在您的容器中安装node-inspector软件包: https : //github.com/node-inspector/node-inspector
  • 在主机上映射容器的端口8080(使用参数-p 8080:8080运行容器)
  • 在容器中运行(使用docker exec或docker-enter)

    node-debug –web-host 0.0.0.0 yourScript.js

  • 转到http:// localhost:8080 / debug?port = 5858

有一个更简单的方法,至less从Docker 0.11什么的。

只在你的开发机器上运行,用–net =“host”运行Docker。 这使得Docker直接绑定到本地主机,而不是创build一个桥接networking适配器,所以Docker机器就像机器上的其他进程一样运行,并在本地接口上打开它需要的端口。

这样,您可以连接到您的debugging端口,就好像Node没有在Docker中运行一样。

更多文档在这里: https : //docs.docker.com/reference/run/

在Docker 0.11之前,除了使用node-inspector之外,还有其他两种debugging方法:

  • 在Docker机器中运行sshd,并设置一个ssh隧道,就好像你要在远程机器上进行debugging一样。
  • 用ip-table“凑合”来“恢复”本地端口的Docker映射。 在这里有一些关于暴露在活Docker容器上的端口 。

就我所见,你需要在启动时提供参数–debug-brk =给节点 – 这将启用debugging。 之后,访问泊坞箱上的指定端口。 您可能必须公开它或隧道(使用SSH)。

之后,将Webstorm远程debugging器指向指定的端口,并且应该设置。

如果您的容器使用网桥,并且您不想将节点检查器安装在与节点进程相同的容器中,我发现这是一个方便的解决scheme:

  • 在主要的node.js容器中,将端口5858映射到主机
  • 在启用debugging的情况下运行主节点进程
  • 使用单独的容器来运行节点检查器
  • 为节点检查器容器使用主机networking

这就是说,节点检查器容器将连接到localhost:5858,然后将其端口映射到主节点容器。

如果你在公共虚拟机上运行这个,那么我会推荐:

  • 确保端口5900 公开(例如通过防火墙)
  • 确保节点检查器端口(例如8080)公开暴露,所以你可以连接到它

我在这里写了更多的细节: https : //keylocation.sg/our-tech/debugging-nodejs-in-docker-using-node-inspector