【发布时间】:2019-11-19 13:59:46
【问题描述】:
我在 Docker 中运行一个 Node 应用程序,使用 docker-compose。我使用 Traefik 作为代理。
我希望能够在 VS Code 中对其进行调试,但我无法连接到我的应用程序:
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"
}
]
}
我使用 Traefik http://core.localhost 上定义的 URL 访问我的应用程序,但我不知道如何将调试器附加到它
谢谢!
【问题讨论】:
-
你确定 docker-compose 文件中的
expose应该这样声明吗? docs.docker.com/compose/compose-file/#expose -
我按照文档改了,但没有更成功
-
您正在编写端口:
80:80,9229:9229,但这用于公开,因为左侧端口是公开端口,右侧端口是您不希望重定向到的端口观点。您应该尝试仅使用端口:9229:YourAppPort并删除expose -
我越来越近了。我设法通过在节点容器(而不是反向代理)中公开 9229 来将调试器附加到我的应用程序,并将我的命令更改为启用检查的启动节点。现在我很难让我的断点命中,但这是另一个问题
标签: node.js docker visual-studio-code traefik vscode-debugger