Вопрос:

Как удаленно отлаживать приложение nodeJs внутри контейнера Docker?

node.js docker visual-studio-code dockerfile

221 просмотра

2 ответа

3420 Репутация автора

У меня есть простое приложение 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 -t remotedebug .

команда запуска докера

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

после запуска докера консоль выводит сообщение

Отладчик прослушивает 127.0.0.1:5858

но я не могу получить доступ к приложению узла с localhost: 8080 и не могу отладить с помощью VScode.

Автор: azad Источник Размещён: 11.01.2018 05:08

Ответы (2)


0 плюса

116 Репутация автора

Вы используете родной докер или докер-машину? Я подозреваю, что вы используете докер, и в этом случае докер работает внутри виртуальной машины, и вам нужно подключиться к 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.

Автор: Richard Vodden Размещён: 11.01.2018 05:33

0 плюса

11 Репутация автора

Вы должны указать --inspectили --inspect-brkдля своего dockerfile cmd, не забудьте указать, 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"
},
Автор: hossein alipour Размещён: 21.05.2019 06:02
Вопросы из категории :
32x32