Node.js 在VS代码中调试在Docker中运行的节点Typescript应用程序
我正在Docker中运行一个节点应用程序,使用Node.js 在VS代码中调试在Docker中运行的节点Typescript应用程序,node.js,docker,visual-studio-code,traefik,vscode-debugger,Node.js,Docker,Visual Studio Code,Traefik,Vscode Debugger,我正在Docker中运行一个节点应用程序,使用Docker compose。我使用Traefik作为代理。 我希望能够在VS代码中调试它,但我无法连接到我的应用程序: connect ECONNREFUSED 127.0.0.1:9229 这是我的档案: docker-compose.yml: version: '3' services: traefik: image: traefik:1.7 command: --docker --docker.ex
Docker compose
。我使用Traefik作为代理。
我希望能够在VS代码中调试它,但我无法连接到我的应用程序:
connect ECONNREFUSED 127.0.0.1:9229
这是我的档案:
docker-compose.yml:
version: '3'
services:
traefik:
image: traefik:1.7
command: --docker --docker.exposedbydefault=false
ports:
- '80:80'
- 9229:9229
volumes:
- /var/run/docker.sock:/var/run/docker.sock
core:
image: node:alpine
labels:
- traefik.enable=true
- traefik.port=4001
- traefik.backend=core
- traefik.frontend.rule=Host:core.localhost
volumes:
- ./leav_core:/app
working_dir: /app
command: [sh, -c, 'npm start']
expose:
- '9229'
volumes:
arango_data:
driver: local
npm start
实际执行的命令是:
ts-node --inspect=0.0.0.0:9229 --type-check src/`
VSCode中的调试设置:
{
"version": "0.2.0",
"configurations": [
{
"name": "Docker: Attach to Node",
"type": "node",
"request": "attach",
"remoteRoot": "/app"
}
]
}
我使用Traefikhttp://core.localhost
但我不知道如何将调试器附加到它上
谢谢 我的方法不太好,因为VS代码中有一个很棒的工具叫做“远程开发”。它是一个扩展,允许您直接在VS代码中附加容器 首先,我必须改变启动节点应用程序的方式,以启用检查。由于ts节点不支持
inspect
选项,您必须使用此选项:
node --inspect=0.0.0.0:9229 -r ts-node/register src/
然后,使用远程开发进入您的容器。
一旦进入,您就可以像在“经典”节点环境中一样调试应用程序。个人而言,我在launch.json
中使用了这些设置:
{
"type": "node",
"request": "attach",
"name": "Attach",
"port": 9229,
"skipFiles": [
"<node_internals>/**",
"node_modules/**"
]
}
{
“类型”:“节点”,
“请求”:“附上”,
“名称”:“附上”,
“港口”:9229,
“滑雪板”:[
"/**",
“节点\u模块/**”
]
}
一切正常,我的断点被正确命中,可以有效地调试我的应用程序:)我的方法不太好,因为VS代码中有一个很棒的工具叫做“远程开发”。它是一个扩展,允许您直接在VS代码中附加容器 首先,我必须改变启动节点应用程序的方式,以启用检查。由于ts节点不支持
inspect
选项,您必须使用此选项:
node --inspect=0.0.0.0:9229 -r ts-node/register src/
然后,使用远程开发进入您的容器。
一旦进入,您就可以像在“经典”节点环境中一样调试应用程序。个人而言,我在launch.json
中使用了这些设置:
{
"type": "node",
"request": "attach",
"name": "Attach",
"port": 9229,
"skipFiles": [
"<node_internals>/**",
"node_modules/**"
]
}
{
“类型”:“节点”,
“请求”:“附上”,
“名称”:“附上”,
“港口”:9229,
“滑雪板”:[
"/**",
“节点\u模块/**”
]
}
一切正常,我的断点被正确命中,可以有效地调试我的应用程序:)你确定docker compose文件中的
expose
应该这样声明吗?我根据文档更改了它,但没有更多成功您正在编写端口:80:80
,9229:9229
,但这用于公开,因为左侧端口是公开端口,右侧端口是您不想重定向到的端口。您应该尝试只使用端口:9229:YourAppPort
并删除expose
我越来越近了。通过在节点容器(而不是反向器代理)中公开9229,我成功地将调试器连接到我的应用程序,并将命令更改为启用inspect时启动节点。现在我很难命中断点,但这是另一个问题。你确定docker compose文件中的expose
应该这样声明吗?我根据文档更改了它,但没有更多成功您正在编写端口:80:80
,9229:9229
,但这用于公开,因为左侧端口是公开端口,右侧端口是您不想重定向到的端口。您应该尝试只使用端口:9229:YourAppPort
并删除expose
我越来越近了。通过在节点容器(而不是反向器代理)中公开9229,我成功地将调试器连接到我的应用程序,并将命令更改为启用inspect时启动节点。现在我很难命中断点,但这是另一个问题