Ошибка: прослушайте EACCES 0.0.0.0:80 при развертывании образа докера norated / node-red-docker: rpi-v8 с использованием смолы .io на raspberry pi3 - PullRequest
0 голосов
/ 28 октября 2018

Использование смолы.io Я попытался развернуть Dockerfile со следующим содержимым (только 1 строка) на моем устройстве Raspberry pi.

FROM nodered/node-red-docker:rpi-v8

смолы.io успешно построил образ (см. Следующий журнал):

[Success]  Successfully uploaded images
[Success]  Release successfully created!
[Info]     Release: ff11126a791e453d6790b9702290cd5a962c79f6 (id: 646158)
[Info]     ┌─────────┬────────────┬────────────┐
[Info]     │ Service │ Image Size │ Build Time │
[Info]     ├─────────┼────────────┼────────────┤
[Info]     │ main    │ 536.19 MB  │ 26 seconds │
[Info]     └─────────┴────────────┴────────────┘
[Info]     Build finished in 1 minute, 20 seconds
                            \
                             \
                              \\
                               \\
                                >\/7
                            _.-(6'  \
                           (=___._/` \
                                )  \ |
                               /   / |
                              /    > /
                             j    < _\
                         _.-' :      ``.
                         \ r=._\        `.
                        <`\\_  \         .`-.
                         \ r-7  `-. ._  ' .  `\
                          \`,      `-.`7  7)   )
                           \/         \|  \'  / `-._
                                      ||    .'
                                       \\  (
                                        >\  >
                                    ,.-' >.'
                                   <.'_.''
                                     <'

To git.resin.io:gh_janvda/pi3four.git
 + 173e46e...ff11126 master -> master (forced update)

но при развертывании на устройстве raspberry pi сообщалось о следующей ошибке:

27.10.18 23:14:51 (+0200)  main  mount: only root can use "--types" option
27.10.18 23:14:51 (+0200)  main  mount: only root can use "--move" option
27.10.18 23:14:51 (+0200)  main  mount: only root can use "--move" option
27.10.18 23:14:51 (+0200)  main  mount: only root can use "--move" option
27.10.18 23:14:51 (+0200)  main  mount: only root can use "--move" option
27.10.18 23:14:51 (+0200)  main  umount: /dev: umount failed: Operation not permitted
27.10.18 23:14:51 (+0200)  main  mount: only root can use "--move" option
27.10.18 23:14:51 (+0200)  main  ln: cannot remove ‘/dev/ptmx’: Permission denied
27.10.18 23:14:51 (+0200)  main  mount: only root can use "--types" option
27.10.18 23:14:51 (+0200)  main  /sbin/udevd
27.10.18 23:14:52 (+0200)  main  npm info it worked if it ends with ok
27.10.18 23:14:52 (+0200)  main  npm info using npm@5.0.3
27.10.18 23:14:52 (+0200)  main  npm info using node@v8.1.3
27.10.18 23:14:53 (+0200)  main  [..................] \ : verb config Skipping project config: /usr/srcnpm info lifecycle node-red-docker@1.0.0~prestart: node-red-docker@1.0.0
27.10.18 23:14:53 (+0200)  main  [..................] / : info lifecycle node-red-docker@1.0.0~prestartnpm info lifecycle node-red-docker@1.0.0~start: node-red-docker@1.0.0
27.10.18 23:14:53 (+0200)  main
27.10.18 23:14:53 (+0200)  main  > node-red-docker@1.0.0 start /usr/src/node-red
27.10.18 23:14:53 (+0200)  main  > node $NODE_OPTIONS node_modules/node-red/red.js -v $FLOWS "--userDir" "/data"
27.10.18 23:14:53 (+0200)  main
27.10.18 23:14:55 (+0200)  main  27 Oct 21:14:55 - [info]
27.10.18 23:14:55 (+0200)  main
27.10.18 23:14:55 (+0200)  main  Welcome to Node-RED
27.10.18 23:14:55 (+0200)  main  ===================
27.10.18 23:14:55 (+0200)  main
27.10.18 23:14:55 (+0200)  main  27 Oct 21:14:55 - [info] Node-RED version: v0.19.4
27.10.18 23:14:55 (+0200)  main  27 Oct 21:14:55 - [info] Node.js  version: v8.1.3
27.10.18 23:14:55 (+0200)  main  27 Oct 21:14:55 - [info] Linux 4.14.39 arm LE
27.10.18 23:14:56 (+0200)  main  27 Oct 21:14:56 - [info] Loading palette nodes
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [info] Settings file  : /data/settings.js
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [info] Context store  : 'default' [module=memory]
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [info] User directory : /data
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [warn] Projects disabled : set editorTheme.projects.enabled=true to enable
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [info] Flows file     : /data/flows.json
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [info] Creating new flow file
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [warn]
27.10.18 23:15:00 (+0200)  main
27.10.18 23:15:00 (+0200)  main  ---------------------------------------------------------------------
27.10.18 23:15:00 (+0200)  main  Your flow credentials file is encrypted using a system-generated key.
27.10.18 23:15:00 (+0200)  main
27.10.18 23:15:00 (+0200)  main  If the system-generated key is lost for any reason, your credentials
27.10.18 23:15:00 (+0200)  main  file will not be recoverable, you will have to delete it and re-enter
27.10.18 23:15:00 (+0200)  main  your credentials.
27.10.18 23:15:00 (+0200)  main
27.10.18 23:15:00 (+0200)  main  You should set your own key using the 'credentialSecret' option in
27.10.18 23:15:00 (+0200)  main  your settings file. Node-RED will then re-encrypt your credentials
27.10.18 23:15:00 (+0200)  main  file using your chosen key the next time you deploy a change.
27.10.18 23:15:00 (+0200)  main  ---------------------------------------------------------------------
27.10.18 23:15:00 (+0200)  main
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [info] Starting flows
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [info] Started flows
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [error] Uncaught Exception:
27.10.18 23:15:00 (+0200)  main  27 Oct 21:15:00 - [error] Error: listen EACCES 0.0.0.0:80
27.10.18 23:15:00 (+0200)  main      at Object.exports._errnoException (util.js:1022:11)
27.10.18 23:15:00 (+0200)  main      at exports._exceptionWithHostPort (util.js:1045:20)
27.10.18 23:15:00 (+0200)  main      at Server.setupListenHandle [as _listen2] (net.js:1298:19)
27.10.18 23:15:00 (+0200)  main      at listenInCluster (net.js:1363:12)
27.10.18 23:15:00 (+0200)  main      at doListen (net.js:1489:7)
27.10.18 23:15:00 (+0200)  main      at _combinedTickCallback (internal/process/next_tick.js:105:11)
27.10.18 23:15:00 (+0200)  main      at process._tickCallback (internal/process/next_tick.js:161:9)
27.10.18 23:15:00 (+0200)  main  npm info lifecycle node-red-docker@1.0.0~start: Failed to exec start script
27.10.18 23:15:00 (+0200)  main  npm ERR! code ELIFECYCLE
27.10.18 23:15:00 (+0200)  main  npm ERR! errno 1
27.10.18 23:15:00 (+0200)  main  npm ERR! node-red-docker@1.0.0 start: `node $NODE_OPTIONS node_modules/node-red/red.js -v $FLOWS "--userDir" "/data"`
27.10.18 23:15:00 (+0200)  main  npm ERR! Exit status 1
27.10.18 23:15:00 (+0200)  main  npm ERR!
27.10.18 23:15:00 (+0200)  main  npm ERR! Failed at the node-red-docker@1.0.0 start script.
27.10.18 23:15:00 (+0200)  main  npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
27.10.18 23:15:00 (+0200)  main
27.10.18 23:15:00 (+0200)  main  npm ERR! A complete log of this run can be found in:
27.10.18 23:15:00 (+0200)  main  npm ERR!     /usr/src/node-red/.npm/_logs/2018-10-27T21_15_00_316Z-debug.log

По мне, главная ошибка:

27.10.18 23:15:00 (+0200) main 27 окт 21:15:00 - [ошибка] Ошибка: прослушать EACCES 0.0.0.0:80

Таким образом, это означает, что Node-RED прослушивает порт 80, который не разрешен, поскольку пользователь не является пользователем root.

Я думаю, что эту ошибку можно исправить, настроив красный узел так, чтобы он слушал не порт 80, а порт 1880. Мне не ясно, как я могу сделать это в конкретном сценарии, где я хочу использовать Образ Docker nodered / node-red-docker: rpi-v8 , который я хочу развернуть с помощью смолы.io .

Мой вопрос: Как я могу убедиться, что Node-RED прослушивает порт 1880 при развертывании образа nodered / node-red-docker: rpi-v8 с использованием смолы .io ?

1 Ответ

0 голосов
/ 28 октября 2018
  1. Я заметил, что переменная обслуживания устройства "PORT" была установлена ​​на 80 в смолы.io для моего устройства Raspberry Pi.Таким образом, проблема исправлена ​​путем изменения этого значения на 1880.

К вашему сведению: оно было установлено на 80, так как до этого я развернул https://github.com/resin-io-projects/balena-node-red, для которого мне пришлось установить порт на 80.

В качестве альтернативы мы могли бы разрешить приложению node прослушивать любой порт, изменив Dockerfile следующим образом (добавлены последние 3 строки).Преимущество этого подхода состоит в том, что мы можем продолжать использовать порт 80, что означает, что мы можем получить доступ к редактору Node-RED и интерфейсу Node-RED через Интернет, используя общедоступный URL-адрес, предоставленный смолы.io
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
...