【问题标题】:Debugging NodeJs Program in Docker Container with VSCode in one step使用 VSCode 一站式调试 Docker 容器中的 NodeJs 程序
【发布时间】:2017-12-18 21:52:55
【问题描述】:

我正在尝试设置我的 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"
    }
  ]
}

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 中运行“附加”配置时,这可以正常工作。

但是,在从 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"

到我的 package.json 脚本部分。

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

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

【问题讨论】:

  • 您可能想查看自定义任务:code.visualstudio.com/docs/editor/tasks#_custom-tasks 并在附加配置中添加一个自定义任务,该任务将 docker-compose 作为“preLaunchTask”运行。然而,这会带来其他问题。您可以在后台运行 docker-compose。在这种情况下,vscode 将尝试附加到尚未运行的进程。或者,您可以在前台运行它,然后除非您退出进程,否则它不会进入调试器。我还没有解决方案。
  • 查看我今天得到的答案stackoverflow.com/questions/46500639/…

标签: node.js docker visual-studio-code docker-compose


【解决方案1】:

这对我有用,在你的 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

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 2021-02-04
    • 2016-01-04
    • 2018-12-12
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2017-11-15
    相关资源
    最近更新 更多