【问题标题】:How do I use docker-compose.debug.yml to debug my node running in docker?如何使用 docker-compose.debug.yml 调试在 docker 中运行的节点?
【发布时间】:2018-03-12 01:21:07
【问题描述】:

我使用vs docker extension 来创建 docker 文件。但我不知道使用 docker-compose.debug.yml 调试我的代码的“正确”方式是什么,例如我如何设置我的环境。所以我可以直接按 F5,所有的魔法都会发生。

我确实找到了调试代码的方法。首先在终端中运行docker-compose -f docker-compose.debug.yml。然后使用来自In-container Node Development: Visual Studio Code 的launch.json 附加到我在docker 中的节点。

但我认为 Code 可能会提供一种更简单的方式来简化调试过程。

【问题讨论】:

    标签: node.js docker visual-studio-code remote-debugging


    【解决方案1】:

    您可以这样做,但需要进行一些修改。

    launch.json

    {
        // Use IntelliSense to learn about possible Node.js debug attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "type": "node",
                "request": "attach",
                "name": "Attach to Remote",
                "address": "127.0.0.1",
                "port": 9229,
                "localRoot": "${workspaceRoot}",
                "remoteRoot": "/usr/src/app",
                "preLaunchTask": "start_node_compose"
            }
            // {
            //     "type": "node",
            //     "request": "launch",
            //     "name": "Launch Program",
            //     "program": "${workspaceRoot}/index.js"
            // }
        ]
    }
    

    如您所见,我评论了本地发布并将其设为第一个,因此它在 F5 上运行。接下来我们需要定义一个start_node_compose任务

    tasks.json

    {
        "version": "0.1.0",
        "command": "myCommand",
        "isShellCommand": false,
        "args": [],
        "showOutput": "always",
        "tasks": [
            {
                "taskName": "start_node_compose",
                "showOutput": "always",
                "isBuildCommand": true,
                "command": "/bin/bash",
                "args": [
                    "-c",
                    "docker-compose -f docker-compose.yml -f docker-compose.debug.yml up -d && sleep 10"
                ]
            }
        ]
    }
    

    然后,当你使用 F5 运行命令时,你将能够命中断点

    【讨论】:

    • 谢谢。我会试试的
    • 嗨,如果我的 docker-compose.yml 有多个服务我不知道如何附加调试器节点服务,如何设置 remoteRoot?有可能这样做吗?我在这里提出了一个问题github.com/Microsoft/vscode-recipes/issues/29
    • 如果服务多了,你还会有一个节点进程还是更多?如果只有一个节点进程,那么这将起作用
    • 嗨,我在 github 上更新了我的评论。我确实有一个节点,但我不知道如何使它工作。你能告诉我怎么做吗?谢谢!
    • 嗨,我确实试过了,但是没有用。相同的错误消息“错误:连接 ECONNREFUSED 127.0.0.1:9229”。
    【解决方案2】:

    我有同样的问题。使用--inspect=0.0.0.0:9229 解决了它。 我建议你也使用--inspect-brk,让节点进程等待调试器附加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 2020-07-09
      • 2018-05-12
      • 1970-01-01
      • 2015-01-30
      相关资源
      最近更新 更多