使用VSCode在Docker Container中一步调试NodeJs程序

时间:2017-07-13 22:50:30

标签: 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",
      "port": 5858,
      "restart": false,
      "sourceMaps": false,
      "localRoot": "${workspaceRoot}/",
      "remoteRoot": "/usr/local/src/my-app"
    }
  ]
}

搬运工-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中的配置。

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

我尝试使用"通过NPM启动"来调用docker-compose。 VSCode配置并添加

"docker-debug" : "docker-compose -f ./docker-compose.debug.yml up --build"

到我的package.json脚本部分。

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

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

1 个答案:

答案 0 :(得分:0)

这对我有用,在您的launch.json中:

{
  "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