Инспектор узлов в контейнере докеров с использованием docker-compose

Я чувствую, что близок к тому, чтобы docker-compose и node-spector прекрасно работали вместе, но мне бы хотелось, чтобы кто-нибудь показал мне, как они настраивают свой файл docker-compose, а также объяснил, как он работает.

Вот как выглядит мой файл compose.yml только с приложением узла:

  app:
    image: my-node-app
    volumes:
     - '~/mycode:/app/code'
    ports:
     - "3000:3000"
    command: /bin/bash

Также обратите внимание, что я использую Docker для Mac. (Хотя я не думаю, что это должно сильно измениться..)

Я нашел пару руководств по тому, как это сделать, но информация была либо устаревшей, либо казалась неполной. Вот два основных подхода (ни один из них еще не работал у меня):

1) Откуда: https://github.com/seelio/node-spector-docker/issues/1

app:
    image: my-node-app
    ports:
     - "3000:3000"
    command: /bin/bash
    volumes_from:
     - code
debugger:
    image: node-debug
    depends_on: 
      - app
    # `service` instead of `container` for an easier cold start
    network_mode: 'service:app'
    volumes_from:
      - code
code:
    image: node
    volumes:
     - '~/mycode:/app/code'

2)

и из: https://keylocation.sg/our-tech/debugging-nodejs-in-docker-using-node-spector :

 debugger:
    container_name: debugger
    network_mode: host
    extends:
      service: base
    volumes:
      - /app/containers/debugger:/app/container

Требовалась одна небольшая хитрость: добавление сопоставления порта 5858 для контейнера node-app, чтобы Node Inspector мог видеть его как порт 5858 на хосте:

 node-app:
    ports:
      - "5858:5858" # Port needs to be mapped to host so that debugger container can access it

person majorBummer    schedule 26.09.2016    source источник
comment
FWIW, если вы используете узел v6.3.0+ (IIRC), вы можете напрямую использовать инструменты разработчика Chrome, без node-inspector.   -  person mscdex    schedule 26.09.2016
comment
Это здорово знать. Работает ли это при отладке сценария узла, работающего в контейнере докеров?   -  person majorBummer    schedule 26.09.2016
comment
Все, что ему нужно, это открыть один порт, 9229 по умолчанию. Запустите свой скрипт, например: node --inspect --debug-brk foo.js, и он отобразит URL-адрес на стандартном выводе, который вы посещаете в Chrome.   -  person mscdex    schedule 26.09.2016
comment
Вау, это довольно удивительно! Инспектор узлов - это такая проблема в использовании. Это огромный стимул перейти на v6! Спасибо за информацию   -  person majorBummer    schedule 26.09.2016


Ответы (2)


Вы должны добавить EXPOSE 5858 или EXPOSE 9229 в Dockerfile вашего приложения.

person user3105486    schedule 18.06.2017

Интерфейс отладки узла должен быть доступен за пределами локальной сети контейнера Docker, поэтому инспектор следует запускать с

node --inspect-brk=0.0.0.0:9229 index.js

Замените index.js любым узлом, который вы хотите запустить.

--inspect-brk используется вместо --inspect, так что отладчик может быть подключен в начале скрипта, чтобы он мог следить за тем, что он делает, что позволяет отладчику знать, что происходит, эффективно обеспечивая правильную отладку.

Широковещательный IP-адрес заставляет инспектора прослушивать все и не закрывать соединения из-за пределов локального хоста (по умолчанию). 9229 — порт по умолчанию.

person Smar    schedule 12.02.2020