docker - 无法安装节点红色容器
问题描述
我现在尝试了这么多小时,尝试了这么多我现在不得不问的事情。在我的 docker 上,我无法在其上运行 nodered。我一直收到共享卷的权限错误。我的另一个“fhem”容器确实以相同的文件夹权限运行。所以我不明白为什么它对nodered来说是个问题。
目前我在最新版本上使用 ubuntu。
我想将 nodered 实例中的 /data 文件夹存储在 /opt/docker-nodered 中,但这不起作用。
我尝试使用以下命令安装它:
docker run -it -p 1880:1880 -v /opt/docker-nodered/:/data --name nodered nodered/node-red-docker
这里的权限如下:
stefmde@homeautomation:/opt$ ll
total 16
drwxr-xr-x 4 stefmde stefmde 4096 Sep 24 09:52 ./
drwxr-xr-x 23 root root 4096 Sep 21 18:56 ../
drwxr-xr-x 10 stefmde stefmde 4096 Sep 22 12:48 docker-fhem/
drwxr-xr-x 2 stefmde stefmde 4096 Sep 24 14:01 docker-nodered/
我用以下内容更改了它们以尝试使其运行:
chown -R stefmde:stefmde /opt/docker-nored
但不管我尝试什么,我总是得到同样的错误:
stefmde@homeautomation:/opt/docker-nodered$ sudo docker run -it -p 1880:1880 -v /opt/docker-nodered/:/data --name nod ered nodered/node-red-docker
> node-red-docker@1.0.0 start /usr/src/node-red
> node $NODE_OPTIONS node_modules/node-red/red.js -v $FLOWS "--userDir" "/data"
fs.js:642
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: EACCES: permission denied, open '/data/settings.js'
at Error (native)
at Object.fs.openSync (fs.js:642:18)
at copyFileFallback (/usr/src/node-red/node_modules/fs-extra/lib/copy-sync/copy-sync.js:93:18)
at copyFile (/usr/src/node-red/node_modules/fs-extra/lib/copy-sync/copy-sync.js:85:10)
at onFile (/usr/src/node-red/node_modules/fs-extra/lib/copy-sync/copy-sync.js:58:12)
at getStats (/usr/src/node-red/node_modules/fs-extra/lib/copy-sync/copy-sync.js:51:39)
at startCopy (/usr/src/node-red/node_modules/fs-extra/lib/copy-sync/copy-sync.js:41:10)
at Object.copySync (/usr/src/node-red/node_modules/fs-extra/lib/copy-sync/copy-sync.js:36:10)
at Object.<anonymous> (/usr/src/node-red/node_modules/node-red/red.js:104:20)
at Module._compile (module.js:577:32)
npm ERR! Linux 4.15.0-34-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "start" "--" "--userDir" "/data"
npm ERR! node v6.14.4
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! node-red-docker@1.0.0 start: `node $NODE_OPTIONS node_modules/node-red/red.js -v $FLOWS "--userDir" "/data"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the node-red-docker@1.0.0 start script 'node $NODE_OPTIONS node_modules/node-red/red.js -v $FLOWS "--userDir" "/data"'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the node-red-docker package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node $NODE_OPTIONS node_modules/node-red/red.js -v $FLOWS "--userDir" "/data"
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs node-red-docker
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls node-red-docker
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /usr/src/node-red/npm-debug.log
npm.debug.log 文件不存在
我尝试了不同的权限集,我检查了我的用户的 1000 UUID,我尝试手动运行“npm install”,在 github 上检查了不同的错误票,尝试了“--User”-Flag 不起作用,正在运行带有和不带有“sudo”的docker命令等等。
请有人可以尝试帮助我或告诉我我做错了什么?我希望你能:)
解决方案
node-red docker 容器以用户身份运行node-red
,许多其他 docker 容器以默认用户身份运行应用程序,恰好是 root。
目前您的docker-nodered
目录只能由用户写入stefmde
并且root
(因为 root 可以写入任何地方)
快速的解决方案是让docker-nodered
任何人都可以写(chmod o+w docker-nodered
)这应该有效。
更长的解决方案是计算出node-red
用户的 UID 是什么,将一个组添加到主机操作系统,该组的成员具有相同的 UID node-red
,并使该组拥有的目录,然后使其组可写(chmod g+w docker-nodered
)
推荐阅读
- c++ - 如何禁用套接字发送缓冲区
- javascript - 我可以在数据中使用重复语句吗?
- flutter - webview_flutter 无法识别 iOS 上的点击
- mysql - 无法在 FK 列中插入 NULL 值
- python - _imagingft c 模块未安装 amazon linux elasticbeanstalk
- javascript - 使用 JavaScript 在 Selenium 中执行 JavaScript 代码
- swift - Xcode 13.0 中的模棱两可的布局警告
- php - 如何在 laravel 中显示旧的 datetime-local 值?
- sql - 在主表中生成虚拟列
- mysql - 如何为重新测试记录创建模式?