You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用VSCode调试Docker容器中双端口运行的Node.js应用?

如何将VSCode调试器附加到运行多Node.js应用的Docker容器

当然可以实现,以下是具体的步骤:

1. 为两个Node.js应用启用调试模式

Node.js默认不会开启调试端口,你需要修改每个项目的启动脚本,指定不同的调试端口(避免冲突),并绑定到容器的所有网卡(0.0.0.0),确保外部能访问:

  • Web项目:修改package.json的scripts字段:

    "scripts": {
      "dev": "node --inspect=0.0.0.0:9229 src/index.js"
    }
    

    如果用nodemon热重载,改成:

    "scripts": {
      "dev": "nodemon --inspect=0.0.0.0:9229 src/index.js"
    }
    
  • API项目:同理,使用另一个调试端口(比如9230):

    "scripts": {
      "dev": "node --inspect=0.0.0.0:9230 src/index.js"
    }
    

2. 更新Docker配置,暴露调试端口

不管你用Dockerfile还是docker-compose.yml,都需要把调试端口和业务端口一起暴露并映射到宿主机:

用Dockerfile的情况

添加EXPOSE指令:

# 暴露业务端口和调试端口
EXPOSE 3000 4000 9229 9230

(注:3000是Web业务端口,4000是API业务端口,根据你的实际情况调整)

用docker-compose.yml的情况

在服务的ports字段添加端口映射:

services:
  your-app:
    build: .
    ports:
      - "3000:3000" # Web业务端口映射
      - "4000:4000" # API业务端口映射
      - "9229:9229" # Web调试端口映射
      - "9230:9230" # API调试端口映射
    volumes:
      - ./web:/app/web # 挂载本地Web代码到容器,确保代码同步
      - ./api:/app/api # 挂载本地API代码到容器

(卷挂载很重要,确保本地修改的代码和容器内一致,避免调试断点不生效)

之后重新构建并启动容器:

docker-compose up --build

3. 配置VSCode调试文件

在VSCode中,打开项目根目录,创建.vscode/launch.json文件,添加两个调试配置,分别对应Web和API应用:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Attach to Web (Docker)",
      "port": 9229,
      "address": "localhost",
      "localRoot": "${workspaceFolder}/web",
      "remoteRoot": "/app/web"
    },
    {
      "type": "node",
      "request": "attach",
      "name": "Attach to API (Docker)",
      "port": 9230,
      "address": "localhost",
      "localRoot": "${workspaceFolder}/api",
      "remoteRoot": "/app/api"
    }
  ]
}

参数说明:

  • localRoot:本地机器上对应项目的文件夹路径
  • remoteRoot:容器内该项目的存放路径,必须和你Docker配置的工作目录一致

4. 启动调试

  1. 确认Docker容器已启动,且两个应用都通过npm run dev正常运行(此时调试端口已开启)
  2. 在VSCode的调试面板(Ctrl+Shift+D),选择对应的调试目标(比如"Attach to Web (Docker)")
  3. 点击启动按钮,调试器会自动附加到容器内的应用
  4. 现在可以在本地代码中设置断点,调试容器内的Node.js应用了

注意事项

  • 务必保证本地代码和容器内代码完全同步,推荐用Docker卷挂载实现,否则断点可能不生效
  • 如果使用nodemon,应用重启后调试器会断开,需要重新附加;若想启动时暂停应用,可以用--inspect-brk替代--inspect
  • 调试端口不能和业务端口冲突,且两个应用的调试端口必须唯一

内容的提问来源于stack exchange,提问作者Pandiyan Cool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:57:13