我现在尝试了很多小时,尝试了很多事情,现在我不得不问。 在我的Docker上,我无法在它上面运行。我一直收到共享卷的权限错误。我的其他“ 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命令,等等。
请有人可以帮助我或告诉我我做错了什么吗? 我希望你可以:)
答案 0 :(得分:1)
节点红色的docker容器以用户node-red
的身份运行,许多其他docker容器以默认用户(恰好是root)的身份运行该应用程序。
目前您的docker-nodered
目录仅可由用户stefmde
和root
写入(因为root可以写到任何地方)
快速的解决方案是使docker-nodered
的任何人都可以写chmod o+w docker-nodered
,这应该可行。
更长的解决方案是弄清楚node-red
用户的UID,将一个组添加到主机操作系统,该组的成员具有与node-red
相同的UID,并使目录拥有然后将该群组设为可写(chmod g+w docker-nodered
)
答案 1 :(得分:0)
我有一种使用docker-compose为我工作的解决方法。我创建了文件checkIfSeen = (uid, news_id) => {
const docRef = Fire.shared.informationsCollection.doc(news_id).collection('users').doc(uid);
docRef.get()
.then((docSnapshot) => {
if (docSnapshot.exists) {
this.alreadySeen();
} else {
this.notSeen();
}
});
}
alreadySeen = () => {
return true;
}
notSeen = () => {
return false;
}
,其内容如下:
docker-compose-node-red.yml
然后,我跑步
version: "3.7"
services:
node-red:
image: nodered/node-red:latest
ports:
- "1880:1880"
volumes:
- "/path/to/a-nodered-project:/data"
在文件夹$ docker-compose -f docker-compose-node-red.yml up
中,我有一个flows.json文件及其他文件。从节点红色容器的角度来看,一切都可以访问。
答案 2 :(得分:0)
到目前为止,最简单的方法是将 Node-RED 数据文件夹的所有权更改为用户 1000 和组 1000,因为这是在 Node-RED docker 容器中硬编码的:
sudo chown 1000:1000 name-of-node-red-data-folder