VSCode - debug运行在docker 容器里的nodejs

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 运行时中的服务器)。

 


版权声明:本文为it_wentutu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。