В образе Docker не отображаются контакты GPIO с установленным для Привилегированного значения значением True в параметрах создания IoT Edge Container - PullRequest
0 голосов
/ 29 мая 2019

Я настраиваю 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

Любое понимание или помощь очень ценится, спасибо.

...