1. 在docker中暴露出端口9229
9229是nodejs默认的debug端口
1.1 docker-compose.yml 文件的ports中需要添加
services:
mockit-routes:
image: 'mockit-routes'
build: 'mockit-routes'
ports:
- 3000:3000
- "9229:9229"
volumes:
- ./configuration/routes.json:/usr/src/mockit-routes/configuration/routes.json
或者docker run 的时候添加 -p 9229:9229
docker run -d -p 3000:3000 -p 9229:9229 node:15.0.1-alpine
1.2 修改Dockerfile文件, 多暴露出9229端口
EXPOSE 3000 9229
2.修改npm运行命令
修改Dockerfile 文件的命令
CMD ["npm", "run", "debug"]
对应的package.json里面的scripts
"scripts": {
"debug": "node --inspect=0.0.0.0:9229 src/index",
},
// src/index 为要debug的js
3.生成launch.json文件
修改launch.json文件
{
"version": "0.2.0",
"configurations": [
{
"name": "Docker: Attach to Node",
"type": "node",
"request": "attach",
"restart": true,
"port": 9229,
"address": "localhost",
"localRoot": "${workspaceFolder}",
"remoteRoot": "/usr/src/mockit-routes", //对应Dockerfile 里面的路径
"protocol": "inspector"
}
]
}
4. 运行
启动docker,vscode中点击Run and Debug
查看docker 容器日志, 有如下log即为debug上了
Debugger listening on ws://0.0.0.0:9229/38be2bc8-d92d-41cb-b238-750d3d2e7147
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
浏览器访问 localhost:3000
接下来就可以随心所欲的debug了
注意: 我的docker 暴露出两个端口3000, 9229 浏览器访问的时候是3000, debug是9229,
这两个端口不能一致,Web 服务器和调试器是独立的服务器, 不能使用同一个端口 否则会报错WebSockets request was expected(调试器是内置在 node.js 运行时中的服务器)。