当前位置: 首页 > 知识库问答 >
问题:

如何在Docker容器中远程调试nodeJs应用程序?

彭炳
2023-03-14

我有一个简单的nodeJs应用程序,它使用快速框架。我可以在docker容器中成功运行这个应用程序。

我需要从VS代码远程调试这个应用程序如何做到这一点。

我在远程调试中采取的以下步骤

var express = require('express');

var app = express();

var fs = require('fs')
var logger = fs.createWriteStream('log.txt', { flags: 'a'  })

app.get('/', function(reg, res){

    res.send('Home page ' + reg.params.id);
});

app.get('/:id', function(reg, res){

    if(reg.params.id != 'favicon.ico')
        logger.write( ' ' + reg.params.id);

    res.send('Home page ' + reg.params.id);
});


app.listen(3000, function(){

    console.log('A test server is running');
})
{
    "type": "node",
    "request": "attach",
    "name": "Attach to Process",
    "port": 5858,
    "address": "192.168.1.10",
    "restart": false,
    "sourceMaps": false,
    "localRoot": "${workspaceRoot}/",
    "remoteRoot": "/app/"
 }
FROM node:7.2.0-alpine
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN npm install
WORKDIR /app/src
EXPOSE 8080
EXPOSE 5858
CMD ["node","--debug-brk=5858","app.js"]

docker构建命令

docker build -t remotedebug .

docker运行命令

docker run --rm --name test -p8080:3000 -p5858:5858 remotedebug

运行docker后,it控制台输出一条消息

调试器侦听127.0.0.1:5858

但是我无法从本地主机:8080访问节点应用程序,也无法从VScode进行调试。

共有2个答案

谭泉
2023-03-14

您使用的是本机docker还是docker-Machine?我怀疑您使用的是docker机器,在这种情况下docker在虚拟机中运行,您需要连接到该机器的IP地址,而不是127.0.0.1。类型:

docker-machine ls

您将得到如下输出:

NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS 
default - virtualbox Running tcp://192.168.99.100:2376 v1.9.1

在这种情况下,你会告诉VS Code连接到192.168.99.100:5858

郑承恩
2023-03-14

您必须为您的dockerfile cmd指定-检查-检查-brk,请记住指定0.0.0.0,因为nodejs绑定到会导致问题的127.0.0.1

例子:

expose 9090
node --inspect=0.0.0.0:9090 ...otherargs

和vscode:

{
  "type": "node",
  "request": "attach",
  "name": "attach to docker",
  "port": 9290
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/usr/src/app/server"
},
 类似资料:
  • 我很难弄清楚如何设置在Docker容器中运行的python应用程序(Flask)的远程调试。具体来说,我使用的是docker compose、PyCharm professional和python 3.5。这就是我到目前为止所做的: > 我把pycharm-debug-py3k.egg复制到项目文件夹 我在wsgi.py文件中添加了以下行: 我在PyCharm中创建了一个远程调试配置(通过将本地机

  • 问题内容: 我刚刚注册了这个问题。关于是否可以使用VS Code在Docker容器中远程调试python代码。我在这里有一个完全配置的Docker容器。我在这方面获得了一些帮助,无论如何我还是Docker的新手。在其中运行Odoo v10。但是我无法在VS Code中进行远程调试。我已经尝试过这种解释,但我真的不明白。可能吗 如果是的话,我该如何运作?我正在使用VS Code 1.6.1和Don

  • 问题内容: 我有一个包含以下内容的Dockerfile: 我的docker-compose.yml看起来像这样: 当我执行 docker-composer时, 我看到一条消息“正在 侦听地址为5005的传输dt_socket ”。但是,当我尝试与jdb或Idea连接时,出现“ java.io.IOException:握手失败-连接过早关闭 ”。 如果我将 openjdk:9 更改为 openjdk

  • 问题内容: 我有一个在Linux机器上运行的Java应用程序。我使用以下命令运行Java应用程序: 我已经在此Linux机器上为TCP打开了端口4000。我使用Windows XP计算机上的eclipse,并尝试连接到此应用程序。我也在Windows中打开了端口。 这两台机器都在LAN上,但是我似乎无法将调试器连接到Java应用程序。我究竟做错了什么? 问题答案: 我注意到有些人在这里剪切和粘贴该

  • 问题内容: 我是Docker的新手。我已经阅读了docker remote API中的教程。在创建容器方面。它显示了太多无法填充的参数。我想知道什么等效于此命令: docker run -d -p 5000:5000 –restart =始终–name注册表注册表:2。 我对此一无所知。谁能告诉我?谢谢! 问题答案: 原始答案(2015年7月): 如本教程所述(如果启用了远程API的话)(不直接测

  • 问题内容: 我有一个Rails应用程序在开发环境中的docker容器中运行。 当我尝试通过在代码中放置某个地方并将其附加到容器上来对其进行调试时,我可以在输出中看到提示,但提示不会暂停,并且无法像没有docker容器一样与之交互。 那么如何调试容器化应用程序? 问题答案: 如果您使用的是docker-compose,则可以将这些标志添加到: 然后使用附加到您的过程。现在在这里工作。确保在您的容器上