找Bug秘技:如何在Docker容器中调试Node.js应用?

找Bug秘技:如何在Docker容器中调试Node.js应用?_第1张图片


在本文中,我们将来学习如何在Docker容器里Debug 一个Node.js应用。

你也许要问,我干嘛要学这个呀?答案很简单:

很多时候,你需要在本地运行你的应用,使用容器时只能装database和消息队列(MSMQ)。但是很多的Bug只有在整个APP都容器化的时候才会  现出原形,这时候,懂得在服务里加上一个调试器就很有用处了。

有调查显示,将近一半的Node.js开发者都使用Docker。而容器化,毫无疑问是非常强大的工具。


如何使用Node inspector?

如果你总是用printf这种原始的方式,要及时找到需要的东西实在太难了。

要是你每次添加console.log后都要重建你的 container image,那就更狗血了。但是如果实在它运行的时候就一次建好image,然后检查你的变量,这样就容易多了。为了方便你理解接下来要做的事,建议你先熟悉一下node inspector命令。

让你的Node应用在调试模式下运行,只需要在node后面添上inspect ,比如这样:

找Bug秘技:如何在Docker容器中调试Node.js应用?_第2张图片

开启调试模式后,通常代码会在第一行停下来,等待你的互动。对于一直使用gdb调试代码的人,这个界面会很舒服;但是如果习惯了使用GUI跟调试器交互,你可能会有打开Chrome进入到chrome://inspect的冲动。

你会看到这样的界面:

找Bug秘技:如何在Docker容器中调试Node.js应用?_第3张图片在远程模目标下,点击inspect 就会出现Chrome开发者工具调试器。

找Bug秘技:如何在Docker容器中调试Node.js应用?_第4张图片



在Docker容器中调试Node.js

首先,新建一个Dockerfile

找Bug秘技:如何在Docker容器中调试Node.js应用?_第5张图片

然后添加docker-compose.yaml

找Bug秘技:如何在Docker容器中调试Node.js应用?_第6张图片

接着运行docker-compose up,就能够在http://localhost:3000连接上服务。

接下来就是把调试接口公开出来。让我们先来创建一个debug-compose.yaml

找Bug秘技:如何在Docker容器中调试Node.js应用?_第7张图片

如上所示,我们开启了一个接口9229,这就是Node.js App的调试接口。同时我们也重写了在Dockerfile中指定的命令;--inspect-brk=0.0.0.0这个参数起到两个作用:

1.--inspect告诉Node我们想要在调试模式运行App。
2.通过添加-brk,来确保应用在第一行停下来,这样我们就有足够时间打开inspector
3.添加=0.0.0.0使得我们可以从任意IP地址连接调试器。

inspector的默认地址是
127.0.0.1,因为我们不会想要别人随便给我们的App添加调试器。然而,容器和我们的IP以及主机都不相同,我们是无法连接的。当我们在本地连接时没有问题,当我们肯定不会只放在本地。因此,一定要确保这里的调试文件和你的docker-compose.yaml不能相同。

同时要注意,接口的转发规则是在 " 里面的,忽略这一点就很可能出问题,并且难以自发现。到这里,你就可以调试你的App了:

找Bug秘技:如何在Docker容器中调试Node.js应用?_第8张图片
使用VS Code进行调试

尽管使用inspector发现单个文件的问题很方便,要检查起整个项目就麻烦了。在这种情况下,把调试器添加进IDE就会好很多。这里我们以VS Code为例:

首先,找到debug按钮,然后点击设置按钮

找Bug秘技:如何在Docker容器中调试Node.js应用?_第9张图片

然后,在弹出列表中选择Docker(确保你已安装Docker插件)

找Bug秘技:如何在Docker容器中调试Node.js应用?_第10张图片

这时,就会在.vscode项目汇总生成一个launch.json文件:

找Bug秘技:如何在Docker容器中调试Node.js应用?_第11张图片

注意,我们的应用根目录是在容器文件系统里,因此需要更新一下;完成后应该如下:

找Bug秘技:如何在Docker容器中调试Node.js应用?_第12张图片

此时,如果你按下F5,调试器就会在VS Code中出现,再次点击,服务器就开始监听。如果你在某处设置一个断点(breakpoint)并调用服务器http://localhost:3000,就会看到如下界面:

找Bug秘技:如何在Docker容器中调试Node.js应用?_第13张图片

注:本文翻译自著名技术博客RisingStack;作者:Tamas Kadlecsik;原文地址:https://blog.risingstack.com/how-to-debug-a-node-js-app-in-a-docker-container/;翻译:实验楼扫地阿姨。


640?wx_fmt=png


今日推荐

点击图片查看详情

找Bug秘技:如何在Docker容器中调试Node.js应用?_第14张图片

找Bug秘技:如何在Docker容器中调试Node.js应用?_第15张图片

找Bug秘技:如何在Docker容器中调试Node.js应用?_第16张图片


楼+课程

《Python实战第九期》

今晚开课啦!报名的同学请注意

记得按时上课哦

2018,最后一波努力,加油!


还想报名/插班的同学

欢迎添加助教小姐姐微信sylmm002咨询



640?wx_fmt=jpeg

你可能感兴趣的:(找Bug秘技:如何在Docker容器中调试Node.js应用?)