如何通过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