【问题标题】:Debug in VS Code a Node Typescript app running in Docker在 VS Code 中调试在 Docker 中运行的 Node Typescript 应用程序
【发布时间】: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:809229:9229,但这用于公开,因为左侧端口是公开端口,右侧端口是您不希望重定向到的端口观点。您应该尝试仅使用端口:9229:YourAppPort 并删除 expose
  • 我越来越近了。我设法通过在节点容器(而不是反向代理)中公开 9229 来将调试器附加到我的应用程序,并将我的命令更改为启用检查的启动节点。现在我很难让我的断点命中,但这是另一个问题

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


【解决方案1】:

我的方法并不好,因为 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/**"
    ]
}

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

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2020-07-09
    • 2020-03-05
    • 2018-10-30
    • 1970-01-01
    • 2021-01-06
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多