Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在VS代码中调试在Docker中运行的节点Typescript应用程序_Node.js_Docker_Visual Studio Code_Traefik_Vscode Debugger - Fatal编程技术网

Node.js 在VS代码中调试在Docker中运行的节点Typescript应用程序

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中运行一个节点应用程序,使用
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"
        }
    ]
}
我使用Traefik
http://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时启动节点。现在我很难命中断点,但这是另一个问题