контейнер докера не может использовать wringpi [duplicate]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

9
задан Nyxynyx 5 May 2015 в 17:44
поделиться

3 ответа

Вы, вероятно, используете docker volumes, чтобы открыть интерфейс sysfs. Например, что-то вроде:

docker run -v /sys:/sys fedora bash

Это вывело бы /sys на хост в качестве /sys внутри контейнера, и у вас будет доступ к иерархии /sys/class/gpio.

Если вы использовали код, который обращался к контактам GPIO, не используя интерфейс sysfs, вам нужно было бы открыть любой узел устройства, который он использует внутри контейнера, возможно, с чем-то вроде --device аргумента docker run.

4
ответ дан larsks 18 August 2018 в 01:09
поделиться

На хосте Linux есть три возможных способа получить доступ к контактам GPIO из контейнера Docker.

1. Запуск Docker с опцией «--privileged»

Запуск такого контейнера даст контейнеру полный доступ к устройствам хоста, включая GPIO:

$ docker run --privileged -d whatever

Проверьте Документация Docker по этой опции . Это может быть не лучший выбор в зависимости от того, насколько жесткими ваши требования безопасности.

2. Добавление устройства / dev / gpiomem

Вместо того, чтобы отображать все устройства хоста в контейнере, вы можете быть конкретным и только показывать устройство / dev / gpiomem в контейнер во время выполнения. Имейте в виду, что этому устройству требуется поддержка драйверов ядра в дистрибутиве Linux хоста. Последние выпуски Raspbian должны иметь это. Ваш пробег с другими распределениями может отличаться.

$ docker run --device /dev/gpiomem -d whatever

3. Использование файловой системы sysfs на хосте

GPIO Pi представлен в файловой системе хоста под / sys / class / gpio. Доступ к ним можно получить с помощью прав пользователя через виртуальные файлы в этой файловой системе. Используйте тома Docker, чтобы выставить это в свой контейнер:

$ docker run -v /sys:/sys -d whatever

Учтите, что использование sysfs для GPIO, вероятно, будет медленнее, чем подход к устройству.

Библиотеки GPIO

Какой из этих трех подходов соответствует вашим потребностям, также будет зависеть от библиотек, которые вы используете при доступе к GPIO. Не все библиотеки поддерживают все три этих параметра.

4
ответ дан Tobias 18 August 2018 в 01:09
поделиться

Я бы использовал это изображение: https://github.com/acencini/rpi-python-serial-wiringpi в качестве базового изображения. Здесь вы можете легко получить доступ к python. Или вы можете решить загрузить узел на изображение и использовать эти две библиотеки npm для доступа через javascript

https://github.com/bryan-m-hughes/raspi - - https://github.com/bryan-m-hughes/raspi-gpio

. Основанием для всего этого является проводкаPi, как вы можете видеть в файле Docker, и что вам нужно запустить эту команду при первом запуске изображения:

docker run --device /dev/ttyAMA0:/dev/ttyAMA0 --device /dev/mem:/dev/mem --privileged -ti acencini/rpi-python-serial-wiringpi /bin/bash

Важно то, что вы открываете dev-порты и mem для подключенияPi для доступа к нему. Привилегированный доступ к / dev / mem требуется по проводкеPi.

2
ответ дан vonGohren 18 August 2018 в 01:09
поделиться
  • 1
    Мне удалось подключить проводники в контейнере, используя --device /dev/gpiomem:/dev/gpiomem и без , используя --privileged. – larsks 3 July 2018 в 16:33
Другие вопросы по тегам:

Похожие вопросы: