Как обновить файл settings.js в образе node-red / node-red-docker при развертывании с помощью matrix.io? - PullRequest
0 голосов
/ 28 октября 2018

Я использую Dockerfile с указанным ниже содержимым, которое я развертываю, используя смолы.io на Raspberry Pi.

FROM nodered/node-red-docker:rpi-v8
USER root
RUN sudo setcap 'cap_net_bind_service=+ep'  $(eval readlink -f `which node`)
USER node-red

Я также хотел бы обновить settings.js, то естьиспользуется Node-RED, но я не знаю, как я могу это сделать.

Я создал файл settings.js и добавил следующую строку в свой Dockerfile сразу после команды RUN ... которая выполнила сборку ибыл развернут смолы.io без ошибок.

COPY settings.js /data/

... но при проверке папки /data/ я вижу, что settings.js не обновляется.Я все еще вижу старый settings.js, который был автоматически создан при предыдущем развертывании и запуске контейнера.

К вашему сведению содержимое папки /data моего контейнера:

node-red@997563c:~$ ls -l /data
total 24
-rw-r--r-- 1 node-red node-red  283 Oct 28 08:57 flows.json
drwxr-xr-x 3 node-red node-red 4096 Oct 27 10:44 lib
drwxr-xr-x 3 root     root     4096 Oct 26 22:27 node-red
-rw-r--r-- 1 node-red node-red  120 Oct 27 16:44 package.json
-rw-r--r-- 1 node-red node-red 8091 Oct 27 10:44 settings.js
node-red@997563c:~$

К вашему сведению ниже файла журнала контейнера, охватывающего запуск приложения Node-RED:

28.10.18 11:18:03 (+0100) Starting service 'main sha256:472f9797c9288bc3d5a9147597fd33fb982ab34f4eb0e467f70842f05a421f3b'
28.10.18 11:18:04 (+0100)  main  mount: only root can use "--types" option
28.10.18 11:18:04 (+0100)  main  mount: only root can use "--move" option
28.10.18 11:18:04 (+0100)  main  mount: only root can use "--move" option
28.10.18 11:18:04 (+0100)  main  mount: only root can use "--move" option
28.10.18 11:18:04 (+0100)  main  mount: only root can use "--move" option
28.10.18 11:18:04 (+0100)  main  umount: /dev: umount failed: Operation not permitted
28.10.18 11:18:04 (+0100)  main  mount: only root can use "--move" option
28.10.18 11:18:04 (+0100)  main  ln: cannot remove ‘/dev/ptmx’: Permission denied
28.10.18 11:18:04 (+0100)  main  mount: only root can use "--types" option
28.10.18 11:18:04 (+0100)  main  /sbin/udevd
28.10.18 11:18:04 (+0100) Started service 'main sha256:472f9797c9288bc3d5a9147597fd33fb982ab34f4eb0e467f70842f05a421f3b'
28.10.18 11:18:05 (+0100)  main  npm info it worked if it ends with ok
28.10.18 11:18:05 (+0100)  main  npm info using npm@5.0.3
28.10.18 11:18:05 (+0100)  main  npm info using node@v8.1.3
npm info lifecycle node-red-docker@1.0.0~prestart: node-red-docker@1.0.0
npm info lifecycle node-red-docker@1.0.0~start: node-red-docker@1.0.0
28.10.18 11:18:05 (+0100)  main
28.10.18 11:18:05 (+0100)  main  > node-red-docker@1.0.0 start /usr/src/node-red
28.10.18 11:18:05 (+0100)  main  > node $NODE_OPTIONS node_modules/node-red/red.js -v $FLOWS "--userDir" "/data"
28.10.18 11:18:05 (+0100)  main
28.10.18 11:18:08 (+0100)  main  28 Oct 10:18:08 - [info]
28.10.18 11:18:08 (+0100)  main
28.10.18 11:18:08 (+0100)  main  Welcome to Node-RED
28.10.18 11:18:08 (+0100)  main  ===================
28.10.18 11:18:08 (+0100)  main
28.10.18 11:18:08 (+0100)  main  28 Oct 10:18:08 - [info] Node-RED version: v0.19.4
28.10.18 11:18:08 (+0100)  main  28 Oct 10:18:08 - [info] Node.js  version: v8.1.3
28.10.18 11:18:08 (+0100)  main  28 Oct 10:18:08 - [info] Linux 4.14.39 arm LE
28.10.18 11:18:09 (+0100)  main  28 Oct 10:18:09 - [info] Loading palette nodes
28.10.18 11:18:12 (+0100)  main  28 Oct 10:18:12 - [info] Settings file  : /data/settings.js
28.10.18 11:18:12 (+0100)  main  28 Oct 10:18:12 - [info] Context store  : 'default' [module=memory]
28.10.18 11:18:12 (+0100)  main  28 Oct 10:18:12 - [info] User directory : /data
28.10.18 11:18:12 (+0100)  main  28 Oct 10:18:12 - [warn] Projects disabled : editorTheme.projects.enabled=false
28.10.18 11:18:12 (+0100)  main  28 Oct 10:18:12 - [info] Flows file     : /data/flows.json
28.10.18 11:18:12 (+0100)  main  28 Oct 10:18:12 - [info] Server now running at http://127.0.0.1:80/
28.10.18 11:18:12 (+0100)  main  28 Oct 10:18:12 - [warn]
28.10.18 11:18:12 (+0100)  main
28.10.18 11:18:12 (+0100)  main  ---------------------------------------------------------------------
28.10.18 11:18:12 (+0100)  main  Your flow credentials file is encrypted using a system-generated key.
28.10.18 11:18:12 (+0100)  main
28.10.18 11:18:12 (+0100)  main  If the system-generated key is lost for any reason, your credentials
28.10.18 11:18:12 (+0100)  main  file will not be recoverable, you will have to delete it and re-enter
28.10.18 11:18:12 (+0100)  main  your credentials.
28.10.18 11:18:12 (+0100)  main
28.10.18 11:18:12 (+0100)  main  You should set your own key using the 'credentialSecret' option in
28.10.18 11:18:12 (+0100)  main  your settings file. Node-RED will then re-encrypt your credentials
28.10.18 11:18:12 (+0100)  main  file using your chosen key the next time you deploy a change.
28.10.18 11:18:12 (+0100)  main  ---------------------------------------------------------------------
28.10.18 11:18:12 (+0100)  main
28.10.18 11:18:12 (+0100)  main  28 Oct 10:18:12 - [info] Starting flows
28.10.18 11:18:12 (+0100)  main  28 Oct 10:18:12 - [info] Started flows

К вашему сведению df вывода моего док-контейнера:

node-red@997563c:~$ df
Filesystem     1K-blocks   Used Available Use% Mounted on
none             6794760 748316   5677608  12% /
tmpfs              65536      0     65536   0% /dev
/dev/mmcblk0p6   6794760 748316   5677608  12% /data
none              306201 245637     40494  86% /lib/modules
tmpfs             499556      0    499556   0% /tmp/resin
shm                65536      0     65536   0% /dev/shm
tmpfs             499556  10024    489532   3% /host/run/dbus
node-red@997563c:~$

1stОбновление (2018-10-28):

Следующие 2 ссылки описывают, как settings.js также предоставляется как часть сценариев сборки Docker для node-RED.Так что это технически возможно, но в настоящее время я не знаю, как я могу сделать это с официальным nodered / node-red-docker хранилище

  1. https://github.com/resin-io-projects/balena-node-red
  2. https://medium.com/@knolleary/deploying-node-red-applications-to-devices-using-resin-io-58d2042cdb0c

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

ПРИЧИНА ROOT:

Эта проблема фактически связана с тем, что смолы.io использует папку /data для постоянного хранения, и файлы могут толькобыть скопирован в эту папку при первом создании контейнера для этого устройства.Поэтому последующее развертывание контейнера не изменит содержимое папки /data.

Это также описано в https://docs.resin.io/learn/develop/runtime/#persistent-storage. Соответствующая часть скопирована ниже:

Постоянное хранилище

Если выЕсли у вас есть данные или конфигурации, которые вы хотели бы сохранить с помощью обновлений ОС и приложений, у вас есть возможность сохранить их в постоянном хранилище.Постоянное хранилище является хорошим местом для записи системных журналов и других данных приложения, которые должны оставаться неизменными даже при изменении кода

...

смолы OS v2.12.0 и выше

Начиная с смолы OS v2.12.0, постоянное хранилище обрабатывается через именованные тома .Поведение во многом аналогично постоянному хранилищу в старых версиях ОС хоста.Фактически, для приложений с одним контейнером по умолчанию docker-compose.yml устанавливает данные смолы с именем volume, которые ссылаются на каталог /data в контейнере.Единственное различие между этой и более ранними версиями заключается в том, что доступ к этим данным через хост-систему осуществляется в / var / lib / docker / volume / _resin-data / _data, а не в / mnt / data / смолы-data / location, используемом сболее ранние версии ОС хоста.

Именованным томам могут быть присвоены произвольные имена и они могут быть связаны с каталогом в одном или нескольких контейнерах.Поскольку каждый выпуск приложения включает в себя docker-compose.yml и имя тома не меняется, данные в томе будут сохраняться при всех обновлениях.

При использовании именованных томов обратите внимание, что:

Если устройство перемещено в новое приложение, старая папка /data будет автоматически очищена. В процессе сборки данные, добавленные в каталог контейнера, настроенный для связи с именованным томом, будут скопированы на том при первом создании на устройстве .

РЕШЕНИЕ:

Чтобы обеспечить эффективное выполнение следующей инструкции в Dockerfile:

COPY settings.js /data/

, вы должны выполнить следующие шаги в смолы.ио панель инструментов.

  1. Создание фиктивного приложения
  2. перемещение устройства в фиктивное приложение
  3. перемещение устройства обратно в исходное приложение

Шаг 2 обеспечит полное стирание папки /data.

Шаг 3 обеспечит эффективное копирование settings.js в папку /data, поскольку онав первый раз образ будет развернут на этом устройстве.

К вашему сведению: URL https://docs.resin.io/learn/manage/actions/#move-to-another-application описывает действие перемещения в другое приложение .

На этой странице вытакже можно найти следующую статистикуЭлемент:

Предупреждение: Для устройств, работающих под управлением смолы OS версии 2.12.0 и выше, данные в постоянном хранилище (именованные тома) автоматически удаляются при перемещении устройства в новое приложение.

0 голосов
/ 28 октября 2018

ОК, поэтому проблема в том, что `/ data 'монтируется поверх того, что когда-либо было в образе докера.

Содержимое /data будет установлено предыдущимверсия образа докера, который вы загрузили на устройство смолы.io.

Я вижу 2 варианта:

  1. Сотрите все изображение и начните снова.Это работает только потому, что вы играете.Это было бы невозможно в производственных условиях.
  2. Войдите в контейнер, отредактируйте / замените settings.js и перезапустите
...