Запуск последовательного порта nodejs в контейнере докеров

Мне нужно запустить приложение nodejs в контейнере докеров. Я не эксперт в Linux, поэтому мне немного сложно понять, как это сделать. Все приложение хранится на github (https://github.com/kashesandr/NRTC). Приложение использует модуль последовательного порта (https://github.com/voodootikigod/node-serialport). который скомпилирован с помощью node-gyp, и в моем случае последовательный порт является виртуальным, который использует драйвер USB2Serial (http://www.prolific.com.tw/US/ShowProduct.aspx?pcid=41) Я хочу создать отдельный док-контейнер для приложения. Не могли бы вы мне помочь?


person kashesandr    schedule 15.03.2016    source источник


Ответы (1)


Этот вопрос очень расплывчатый. В Docker Hub есть официальный образ для создания образов на основе узлов. В файле readme изображения есть много информации о том, как это сделать. Единственная сложная часть, как мне кажется, это как получить доступ к последовательному порту изнутри контейнера. Я считаю, что это возможно только при запуске контейнера в привилегированном режиме, гарантируя, что узел устройства также существует внутри контейнера. Конечно, драйвер USB2Serial должен быть установлен в операционной системе хоста.

Я бы предложил запустить официальное изображение узла в интерактивном режиме и попытаться установить/запустить ваше приложение внутри него вручную, тогда вы сможете позже придумать сценарий на основе этого:

docker run -it --privileged -v /dev:/dev -v path-to-your-app:/usr/src/your-app node:4.4.0 /bin/bash

root@3dd71f11f02f:/# node --version
v4.4.0
root@3dd71f11f02f:/# npm --version
2.14.20
root@3dd71f11f02f:/# gcc --version
gcc (Debian 4.9.2-10) 4.9.2

Как вы видите, это даст вам интерактивный (-it) корневой доступ внутри контейнера, в котором есть все, что вам, вероятно, нужно, с идентичной структурой /dev, что и на хост-ОС (-v /dev:/dev связывает ее), поэтому не должно быть проблем с доступом к портам. . (уточните привязку тома -v /dev:/dev к чему-то более конкретному позже по соображениям безопасности). Если вам нужно все остальное, что не установлено по умолчанию, добавьте это через apt-get (например, apt-get update && apt-get install [package]), так как официальный образ узла основан на Debian Jessie.

После того, как вы выяснили, как запустить приложение (установка npm, gyp что угодно), написание Dockerfile должно быть тривиальным.

FROM node:4.4.0

RUN npm install ...\
  && steps\
  && to && be && executed && inside && the && image

CMD /your/app/start/script.sh

... и выполните docker build, затем запустите свой образ с --privileged в неинтерактивном (без -it) режиме производства.

person Z4-    schedule 22.03.2016
comment
Это имеет большой смысл! Спасибо чувак, надо попробовать. - person kashesandr; 22.03.2016
comment
Я рад это слышать! Ваше здоровье! - person Z4-; 04.05.2016
comment
Нет... К сожалению, есть некоторые проблемы с решением... Контейнер не видит хост-устройства... Вот еще вопрос по stackoverflow stackoverflow.com/questions/37213812 Есть идеи? - person kashesandr; 14.05.2016