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

时间:2018-01-11 05:08:19

标签: node.js docker visual-studio-code dockerfile

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

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

我在

中远程调试以下步骤

简单节点app.js

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');
})

VScode launch.json

{
    "type": "node",
    "request": "attach",
    "name": "Attach to Process",
    "port": 5858,
    "address": "192.168.1.10",
    "restart": false,
    "sourceMaps": false,
    "localRoot": "${workspaceRoot}/",
    "remoteRoot": "/app/"
 }

Dockerfile

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 build命令

docker build -t remotedebug .

泊坞窗运行命令

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

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

  

调试器监听127.0.0.1:5858

但我无法从localhost:8080访问节点应用程序,无法从VScode调试。

2 个答案:

答案 0 :(得分:0)

您使用的是本机码头工程师还是码头工程师?我怀疑您正在使用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

答案 1 :(得分:0)

您必须为dockerfile cmd指定--inspect--inspect-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"
},