使用Docker + Node.js 进行调试,使用Chrome DevTools编辑
由于Docker + Node.js的调试环境搭建让我花了一些时间,所以我总结了简单的步骤。这是使用Chrome DevTools进行调试的一个示例。
这次用到的东西
Docker、Node.js和npm:这些都不用多说,可以使用yarn或其他类似的工具。
2. nodemon:它是一个用来监视源代码变化并自动重启服务器的工具。如果没有这样的工具,每次修改代码后都需要手动重启nodejs才能使改动生效。
3. NIM(节点检查器管理器),Chrome开发工具:它是Chrome的扩展程序,可以在Chrome开发工具中进行调试。
搭建环境
1. Docker、npm、NIM 需要预先安装。
-
- Docker
-
- npm
- NIM
准备一个JS文件。
var http = require('http');
var server = http.createServer(
function (request, response) {
response.write('Hello World!');
response.end();
}
).listen(3000);
-
- Hello World! が表示されます
- portは3000
3. 准备package.json文件
{
"name": "debug-test",
"version": "1.0.0",
"description": "debug test",
"license": "MIT",
"scripts": {
"start": "node src/index.js",
"start:debug": "nodemon -L --inspect-brk=0.0.0.0:9229 src/index.js"
},
"dependencies": {},
"devDependencies": {
"nodemon": "^1.14.1"
}
}
-
- 対象の変更を監視しnodejsを再起動する為 nodemon を入れます
-
- nodemonの -L オプションは、コンテナなどマウントされたドライブでnodemonを実行する時に、監視を有効にする為のオプションです。nodemonのreadmeに書いてあるのですが、これ気づかなくてハマりました;
-
- –inspectはChromeでのデバッグを有効にするオプションで、末尾に-brkを付けると最初の行で停止します。
- ソケットは指定しない場合デフォルト127.0.0.1:9229となりますが、Dockerは127.0.0.1を経由しない様で、0.0.0.0を指定する事で動作しました。
准备Docker Compose文件。
version: "3"
services:
node:
image: node:alpine
user: "node"
working_dir: /home/node/app
environment:
- NODE_ENV
volumes:
- ../app:/home/node/app
expose:
- "3000"
- "9229"
ports:
- "3000:3000"
- "9229:9229"
command: "npm run start:debug"
-
- port 3000と9229を使用します
- パッケージJSONにデバッグ用のstart:debugを作成してあるので、start:debugを実行します
5. 目录结构
node-test
├─app
│ ├─node_modules
│ ├─src
│ │ └─index.js
│ └─package.json
└─docker
└─docker-compose.yml
转到包含 package.json 的目录并运行 npm install。
cd ○○○\node-test\app
npm install
进入包含docker-compose.yml的目录并构建docker。
cd ○○○\node-test\docker
docker-compose build
使用NIM(Node Inspector Manager)和Chrome开发工具进行调试。
1. 将NIM的设置配置为“主机:localhost”和“端口:9229”。


使用docker-compose up -d命令来启动容器并启动node。
使用docker-compose up -d命令,将执行设置为”npm run start:debug”的命令并通过package.json中的start:debug配置启动nodejs。
积分
在Docker上进行调试时,关键点是在”nodemon -L –inspect-brk=0.0.0.0:9229 src/index.js”命令中的”-L”选项和”0.0.0.0:9229″的指定。
总结
以上是使用Chrome DevTools在Docker上进行NodeJS调试的一个示例。
使用这个方法可以在devtools的断点处停止并确认值,所以不再需要直接在代码中编写console.log。改动也变得轻松,因为nodemon会自动重新启动nodejs。
我原本打算在VisualStudioCode中举个例子,但是如果继续写下去会很难理解,所以打算分开来写。