Node.js 使用VSCode一步调试Docker容器中的NodeJs程序
我正在尝试设置我的VSCode环境,这样我就可以通过点击F5一步调试dockerized node.js程序 目前我的设置如下: .vscode/launch.json: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
{
"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将尝试附加到尚未运行的进程。或者,您可以在前台运行它,然后它将不会到达调试器,除非您退出该进程。我还没有解决这个问题的办法。检查一下我今天得到的答案