Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问i²;RaspberryPi 4上Docker中节点为红色的c总线_Docker_Docker Compose_Node Red_I2c_Raspberry Pi4 - Fatal编程技术网

访问i²;RaspberryPi 4上Docker中节点为红色的c总线

访问i²;RaspberryPi 4上Docker中节点为红色的c总线,docker,docker-compose,node-red,i2c,raspberry-pi4,Docker,Docker Compose,Node Red,I2c,Raspberry Pi4,我目前正在为Docker在RaspberryPi 4上设置家庭助理。 我使用了本教程: 作为参考-到目前为止还不错 问题是我想使用Raspberry的I²c接口与不同的设备进行通信。 docker-compose.yaml文件的相关部分如下所示: 版本:“3.8” 服务: [...] 节点红色: 容器名称:节点红色 图像:节点化/节点红色:最新 用户:“1000:1000” 特权:真的 端口: - "1880:1880" 卷数: -/opt/node red:/data -/etc/localt

我目前正在为Docker在RaspberryPi 4上设置家庭助理。 我使用了本教程: 作为参考-到目前为止还不错

问题是我想使用Raspberry的I²c接口与不同的设备进行通信。 docker-compose.yaml文件的相关部分如下所示:

版本:“3.8”
服务:
[...]
节点红色:
容器名称:节点红色
图像:节点化/节点红色:最新
用户:“1000:1000”
特权:真的
端口:
- "1880:1880"
卷数:
-/opt/node red:/data
-/etc/localtime:/etc/localtime:ro
-/etc/timezone:/etc/timezone:ro
设备:
-/dev/mem:/dev/mem
-/dev/gpiomem:/dev/gpiomem
-/dev/i2c-1:/dev/i2c-1
重新启动:除非停止
[...]
我将用户映射到pi(据我所知,
用户:“1000:1000”
行就是这样做的),并将容器设置为特权容器

对于上下文,这是几个命令的结果(对于ls-l,我只放在相关行中):

当我尝试通过I²C节点发送内容时,红色输出
错误:EACCES:权限被拒绝,请在调试选项卡中打开“/dev/i2c-1”

当我将
用户:“1000:1000”
行替换为
用户:“998:998”
时,我的节点红色流工作(我可以向Arduino发送数据),但我无法保存任何新的(节点红色文件归pi所有)

当我执行sudo chmod 666/dev/i2c-1时,它也可以工作,但不安全,当树莓重新启动时会重置

我还可以将/dev/i2c-1的所有权更改为pi,当我尝试它时,它是有效的,但如果可能的话,我宁愿保留i2c组

为什么节点红色容器不能按原样访问/dev/i2c-1


让它工作的最佳方式是什么?

我刚刚将
用户:“1000:1000”
更改为
用户:“1000:998”
,一切似乎都正常。在找到更好的解决方案之前,我只访问pi或i2c组拥有的目录

也许我会为了这个目的创建一个小组


情况似乎是这样的,尽管容器内外的UID是相同的,但容器内的用户无法访问外部用户所属的组所拥有的目录。

我刚刚将
用户:“1000:1000”
更改为
用户:“1000:998”
,一切似乎都正常。在找到更好的解决方案之前,我只访问pi或i2c组拥有的目录

也许我会为了这个目的创建一个小组


情况似乎是,尽管容器内外的UID相同,但容器内的用户无权访问外部用户所属组的目录。

容器内的用户不是容器外组的成员。是,但是容器内部和外部的用户不是共享相同的UID吗?但不同的GID他们也一样:我刚刚将
用户:“1000:1000”
更改为
用户:“1000:998”
,并且似乎一切都正常。我不确定是否理解了所有内容,但我会继续。感谢@hardillb的研究指导!容器中的用户不是容器外部组的成员。是的,但是容器内部和外部的用户不是共享相同的UID吗?但不是相同的GID他们也共享:我刚刚将
用户:“1000:1000”
更改为
用户:“1000:998”
而且似乎一切都正常。我不确定自己是否理解了一切,但我会回到过去。感谢@hardillb的研究指导!
pi@raspberrypi:/dev $ ls -l
crw-rw----  1 root i2c      89,   1 Jul  3 17:17 i2c-1
pi@raspberrypi:/dev $ groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi gpio docker i2c
id pi
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),999(spi),997(gpio),995(docker),998(i2c)
pi@raspberrypi:~ $ docker --version
Docker version 19.03.12, build 48a6621