应用背景
- 服务器代码运行在某个叫做web-api的容器中,一般的debug方式都是webstorm在某个端口启动web-api的服务(请注意:是webstorm启动了服务)因此导致我们的debug只能针对本地运行的代码。
- 代码放到容器中运行的时候,由容器直接启动服务,那webstorm把服务停在断点的位置就不能使用原来的dugger机制
新的debug机制
- nodemon作用
- 1.启动服务类似于node
node app.js === nodemon app.js
- 2.监听代码变化重新启动服务,一旦代码改变立刻重启服务
- 1.启动服务类似于node
-
使用nodemon --inspector=0.0.0.0:5858 app.js
启动对app.js在5858端口的探测功能,从这个端口可以获取代码运行的信息。 - 此时,可以在任何地方启动服务的同时,启动nodemon的探测机制,代码运行的相关信息可以通过访问5858端口得知
操作方式
- 在容器中启动代码的同时启动
nodemon inspector
- 需要重新定义docker-compose.yml文件
web-api:
image: node:8-alpine
ports:
- "3000:3000" //这是启动服务的端口
- "5858:5858" //这是启动nodemon inspector的端口(这个不能忘记暴露,否则代码运行的信息仍然没有办法容器中传出来)
volumes:
- ../web-api:/var/app
command: sh -c "cd /var/app && export NODE_ENV=show-case && node app.js && nodemon --inspector=0.0.0.0:5858 app.js"
networks:
main:
aliases:
- web-api
-
配置你的webstorm debug
- 启动你的容器docker-compose up -d此时你应该在log中看到如下信息
[nodemon] starting `node --inspect=0.0.0.0:5858 app.js`
Debugger listening on ws://0.0.0.0:5858/3965758c-6153-4c72-a934-2fca911fb8b5
For help see https://nodejs.org/en/docs/inspector
Current environment is: show-case
App started at http://localhost:3000
-
接下来点击debug小虫子
- 链接成功后会在服务器的log信息看到
Debugger attached.