使用 vscode + docker 远程调试nodejs
参考:https://juejin.cn/post/6844904098618163207
nodejs的远程debug比php的要容易一些。
创建nodejs容器
主要做的是把文件移到一个新的node容器里,然后使用npm安装好依赖。
这是我的,参考一下,按情况修改
目录结构
dockerfile
FROM node:16.20
COPY start.sh /start.sh COPY app /app
RUN chmod 777 /start.sh &&\ # package.json 存放依赖和版本,在package.json同级目录执行npm install自动安装所有依赖 # 有时候可能因为网络问题 npm install 安装时卡住 cd /app && mkdir uploads && npm install
CMD ["/bin/bash","/start.sh"]
|
docker-compose.yml
version: '2.0' services: web: build: ./ ports: - "17878:8080" - "19229:9229" container_name: Ezejs
|
start.sh
# 如果不加这个,容器启动之后立刻down sleep infinity
|
创建好容器之后,attach vscode进去。
vscode配置
进入容器,下载node_modules到本地,放到项目源码位置,和容器内源码目录结构保持一致。
在debug客户端(容器外)的vscode写launch.json
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", // node 调试 "request": "attach", // launch / attach。luanch 为本地调试,attach 为远程/跨进程调试 "name": "Remote server", // 启动配置的名称,在面板中可以选择 "address": "192.168.109.128", // 服务器地址 "port": 19229, // 服务器端口 "localRoot": "${workspaceFolder}", // 本地程序所在的目录 "remoteRoot": "/app" // 服务器对应程序所在的目录 } ] }
|
开始debug
容器内的shell,执行node --inspect=0.0.0.0:9229 index.js
容器外vscode,切到index.js,打断点,F5,选择nodejs调试,调试就开始了。
问题
我的测试案例是express项目,有端口监听。如果原本的程序很快就结束了,估计等不到debug attach就结束了。我猜的,没测试过。