在VS中调试在Docker中运行的Node Typescript应用

时间:2019-11-19 13:59:46

标签: node.js docker visual-studio-code traefik vscode-debugger

我正在使用docker-compose在Docker中运行Node应用程序。我正在使用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访问我的应用程序,但是我不知道如何将调试器附加到该应用程序上

谢谢!

1 个答案:

答案 0 :(得分:0)

我的方法不好,因为VS Code中有一个很棒的工具称为“远程开发”。这是一个扩展,允许您直接在VS Code中附加容器。

首先,我必须更改启动节点应用程序的方式以启用检查。由于ts-node不支持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/**"
    ]
}

一切正常,我的断点被正确击中,并且可以有效地调试我的应用程序:)