我正在设置运行带有IoT Edge的Raspbian Stretch的Raspberry Pi 3b +。这需要模块的Docker映像和容器。我正在尝试获取一个模块,以从GPIO引脚获取传感器数据并将其发送到另一个模块。当我尝试使用GPIO信息应为/sys/class/gpio/export
的目录时,我发现它不存在。似乎是因为docker没有将privileged
设置为true
,但是由于我是通过IoT Edge进行的,因此无法通过CLI输入。
根据这篇文章https://thenewstack.io/tutorial-connect-and-configure-raspberry-pi-as-an-azure-iot-edge-device/,我需要输入
{
"HostConfig": {
"Privileged": true
}
}
在创建选项下,这是通过将其放入部署清单并发布来完成的。我仍然收到此错误:
/bin/chgrp: cannot access '/sys/class/gpio/export': No such file or directory
。我曾尝试通过授予docker容器USER sudo
来提升特权,但是我相信这是因为docker容器并未真正使用特权设置运行。这是让我相信的帖子:Docker Access to Raspberry Pi GPIO Pins,这意味着它就像使用特权运行docker一样简单。
我尝试将创建选项设置为特权。这是我在Azure门户上的IoT Edge模块详细信息页面的快照: https://i.imgur.com/0Z4epYZ.png
我也放了
{
“ HostConfig”:{
“特权”:true
}
}
CreateOptions
内deployment.template.json
字段内
这是我的dockerfile:
FROM arm32v7/node:8-slim
WORKDIR /app/
COPY package*.json ./
RUN apt-get update
RUN apt-get -y install sudo
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
RUN apt-get install -y python
RUN apt-get install -y build-essential
RUN npm install --production
COPY app.js ./
RUN sudo groupadd gpio
RUN sudo usermod -aG gpio docker
RUN su docker
RUN sudo chgrp gpio /sys/class/gpio/export
RUN sudo chgrp gpio /sys/class/gpio/unexport
RUN sudo chmod 775 /sys/class/gpio/export
RUN sudo chmod 775 /sys/class/gpio/unexport
USER docker
CMD ["node", "app.js"]
注意:这一切都在Visual Studio Code中。一切就绪后,请右键单击我的deployment.template.json
,然后单击Build IoT Solution
。然后,右键单击Azure IoT Hub Devices
下拉菜单中的Edge设备,然后选择Create Deployment for Single Device
,然后选择deployment.arm32v7.json
下的./moduleName/config
。
我希望/sys/class/gpio/export
目录在RPi中也确实存在于容器中。
实际发生的是我收到此错误:
/bin/chgrp: cannot access '/sys/class/gpio/export': No such file or directory
The command '/bin/sh -c sudo chgrp gpio /sys/class/gpio/export' returned a non-zero code: 1
非常感谢您提供任何见解或帮助。