Node.js 使用VSCode一步调试Docker容器中的NodeJs程序

Node.js 使用VSCode一步调试Docker容器中的NodeJs程序,node.js,docker,visual-studio-code,docker-compose,Node.js,Docker,Visual Studio Code,Docker Compose,我正在尝试设置我的VSCode环境,这样我就可以通过点击F5一步调试dockerized node.js程序 目前我的设置如下: .vscode/launch.json: { "version": "0.1.0", "configurations": [ { "name": "Attach", "type": "node", "protocol":"inspector", "request": "attach", "po

我正在尝试设置我的VSCode环境,这样我就可以通过点击F5一步调试dockerized node.js程序

目前我的设置如下:

.vscode/launch.json:

{
  "version": "0.1.0",
  "configurations": [
    {
      "name": "Attach",
      "type": "node",
      "protocol":"inspector",
      "request": "attach",
      "port": 5858,
      "restart": false,
      "sourceMaps": false,
      "localRoot": "${workspaceRoot}/",
      "remoteRoot": "/usr/local/src/my-app"
    }
  ]
}
{
  "name": "Debug Jest",
  "type": "node",
  "request": "launch",
  "cwd": "${workspaceFolder}",
  "runtimeExecutable": "npm",
  "runtimeArgs": ["run-script", "debug"],
  "address": "127.0.0.1",
  "port": 9230,
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/usr/src/app/server"   # path to your nodejs workspace in docker
},
docker-compose.debug.yml:

version: "3"

services:
  app:
    build: .
    ports:
      - "3000:3000"
      - "5858:5858"
    entrypoint: node --inspect-brk=0.0.0.0:5858 app/entry.js
    networks:
      - appnet

networks:
  appnet:
现在,当我在外部终端中执行
docker-compose-f./docker-compose.debug.yml up--build
,然后在VSCode中运行“Attach”配置时,这项工作不会出现任何问题

但是,在从VSCode中附加到远程(docker)进程之前,我找不到运行docker compose的方法。目标是能够直接点击F5,让VSCode启动docker compose,并自动附加到它

我尝试使用“Launch via NPM”VSCode配置调用docker compose并添加

"docker-debug" : "docker-compose -f ./docker-compose.debug.yml up --build"
转到mypackage.json脚本部分

但这只是部分起作用,因为调试器似乎忽略了配置的
remoteRoot
属性,因此对调试我的程序完全没有用处(例如:它不接受断点,它知道如何调试的唯一文件是nodes.js internal…)


你知道我该如何解决这个问题吗?

这对我很有用,在your launch.json中:

{
  "version": "0.1.0",
  "configurations": [
    {
      "name": "Attach",
      "type": "node",
      "protocol":"inspector",
      "request": "attach",
      "port": 5858,
      "restart": false,
      "sourceMaps": false,
      "localRoot": "${workspaceRoot}/",
      "remoteRoot": "/usr/local/src/my-app"
    }
  ]
}
{
  "name": "Debug Jest",
  "type": "node",
  "request": "launch",
  "cwd": "${workspaceFolder}",
  "runtimeExecutable": "npm",
  "runtimeArgs": ["run-script", "debug"],
  "address": "127.0.0.1",
  "port": 9230,
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/usr/src/app/server"   # path to your nodejs workspace in docker
},
package.json运行服务时:

 "scripts": {
    "debug": "docker-compose -p dev -f docker-compose-dev.yml up jestdebug"
  },
在docker-compose-dev.yml中:

version: '3.4'
services:
  jestdebug:
    image: node:10.15.3-alpine
    working_dir: /usr/src/app/server
    command: node --inspect-brk=0.0.0.0:9230 node_modules/.bin/jest --runInBand ${jestdebug_args}
    volumes:
      - nodemodules:/usr/src/app/server/node_modules
      - ../server:/usr/src/app/server
    ports:
      - '9230:9230' # for debuging
    networks:
      - backend
    depends_on:
      - nodejs
    tty: true
# ...other services

您可能希望查看自定义任务:并在附加配置中添加一个作为“预启动任务”运行docker compose的自定义任务。然而,这将带来其他问题。您可以在后台运行docker compose。在这种情况下,vscode将尝试附加到尚未运行的进程。或者,您可以在前台运行它,然后它将不会到达调试器,除非您退出该进程。我还没有解决这个问题的办法。检查一下我今天得到的答案