Docker Node-Red: держать установленные узлы вне контейнера - PullRequest
0 голосов
/ 31 марта 2020

Я должен установить множество отсутствующих узлов-красных узлов в контейнер. Сохранение (именованного) контейнера и запуск его с docker start работает нормально.

Теперь я хочу сохранить установленные узлы в отдельном внешнем каталоге. Если я монтирую /data, делаю внешний каталог, он в основном работает, но не помогает, так как узлы установлены в ~/node_modules. Если я пытаюсь смонтировать ~/node_modules во внешний каталог, красный узел не может запуститься.

Так что я могу сделать, чтобы установленные мной узлы были независимыми от выполняемого контейнера?

РЕДАКТИРОВАТЬ : Между тем я запустил образ следующим образом:

#!/bin/bash
sudo -E docker run -it --rm -p 1893:1880 -p 11893:11880 
  \ -e TZ=Europe/Berlin -e NPM_CONFIG_PREFIX=/data/node_modules/ 
  \ -e NODE_PATH=/usr/src/node-red/node_modules:/data/node_modules:/data/node_modules/lib/node_modules 
  \ --log-driver none --mount type=bind,source="$(pwd)"/data,target=/data 
  \ --name myNodeRed nodered/node-red

, но дополнительные установленные узлы, которые находятся в каталоге /data/node_modules/lib/node_modules, все еще не видны.

РЕДАКТИРОВАТЬ 2 : Тем временем я пытался сохранить контейнер. Таким образом, стало очевидно, что узлы, установленные с использованием npm install -g, полностью игнорируются.

1 Ответ

1 голос
/ 31 марта 2020

Пользователь по умолчанию для экземпляра Node-RED внутри контейнера - не root (как обычно), поэтому вам нужно убедиться, что любой пользователь, подключенный к папке /data, доступен для записи этому пользователю. Это можно сделать, передав идентификатор пользователя контейнеру, чтобы он соответствовал внешнему пользователю, у которого есть разрешение на запись в точку монтирования:

docker run -it --rm -v $(pwd)/data:/data -u $USER -e TZ=Europe/Berlin
 \ -p 1893:1880 -p 11893:11880 --log-driver none
 \ --name myNodeRed nodered/node-red

Узлы Node-RED не должны устанавливаться с -g вариант, вы должны использовать сборку в Palette Manager или, если вам действительно нужно использовать командную строку, запустите npm install <node-name> в каталоге /data внутри контейнера (но вам нужно будет перезапустить контейнер для вновь установленных узлов, чтобы Поднимитесь, и это опять же, почему вы должны использовать менеджер палитры)

...