Я настраиваю Raspberry Pi 3b + под управлением Raspbian Stretch с IoT edge. Для этого требуются образы 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
. Я пытался повысить свои привилегии, предоставив мой докер-контейнер USER sudo
, но я считаю, что это происходит, потому что докер-контейнер действительно не запускается с привилегированными настройками. Это сообщение заставляет меня поверить в это: Доступ Docker к Raspberry Pi GPIO Pins , это означает, что это так же просто, как запустить Docker с привилегированными.
Я пытался поставить опции создания в привилегированные. Вот снимок со страницы сведений о пограничном модуле IoT на портале Azure:
https://i.imgur.com/0Z4epYZ.png
Я также положил
{
"HostConfig": {
"Привилегированный": правда
}
}
внутри поля CreateOptions
в пределах deployment.template.json
Вот мой докер-файл:
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. Как только все будет в порядке, я щелкаю правой кнопкой мыши по deployment.template.json
и нажимаю Build IoT Solution
. Затем я щелкаю правой кнопкой мыши по своему устройству Edge в раскрывающемся списке Azure IoT Hub Devices
и выбираю 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
Любое понимание или помощь очень ценится, спасибо.