hcitool lescan (Bluetooth LE или любое сканирование Bluetooth) в Docker в режиме без привилегий и без хостовой сети возможно?

Вопрос или проблема

Для конкретной задачи, мне не удается сканировать BLE / BlueZ (hcitool, gatttool, btdevice-l) в Docker в режиме без привилегий и не хостовой сети.

Вот мои результаты (в хосте Debian-Jessie-8.8.0 и debian:jessie docker image):

 root1@73ab53a9268e:/# hciconfig -a
 Не удается открыть сокет HCI.: Операция не разрешена

 root1@73ab53a9268e:/# bt-device -l
 Не удалось подключиться к системной шине DBus: Не удалось подключиться: Соединение отклонено

На другом имидже:

root2@0d208802d44a:/# hciconfig -a
Не удается открыть сокет HCI.: Семейство адресов не поддерживается протоколом

Я даже дал все привилегии для Docker на хосте, но все равно не смог этого сделать.

docker run --name container-ID --cap-add=ALL -d -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev -v /proc:/host/proc:ro -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro Image-ID

Итак, возможно ли каким-то образом сканировать BLE / BlueZ в docker в режиме без привилегий и не хостовой сети?

Частичный успех:

С помощью сообщества Docker я успешно запустил сервис DBus внутри контейнера Docker, войдя в Docker следующим образом:

docker run -v /opt/bluetooth:/var/lib/bluetooth -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /tmp/$(mktemp -d):/run -it debian:jessie

Теперь хочу запустить сервис Bluetooth… Если кто-то имеет какие-либо идеи, это было бы полезно.

Ответ или решение

Проведение сканирования Bluetooth LE в Docker

Введение

Использование Docker для работы с Bluetooth LE (Low Energy) и стеком BlueZ может быть сложной задачей, особенно в условиях, когда контейнеры запускаются в неконфиденциальном и ненастроенном сетевом режиме. В данном ответе мы рассмотрим, возможно ли выполнить сканирование Bluetooth в Docker, несмотря на указанные ограничения, а также предложим шаги для решения возникших проблем.

Проблема и ограничения

Ваша первоначальная попытка использования команд hcitool и bt-device внутри контейнера Docker завершилась неудачей, что указывает на отсутствие необходимых прав для доступа к Bluetooth-устройствам на хосте. Сообщения об ошибках, такие как "Can’t open HCI socket" и "Couldn’t connect to DBus system bus", сигнализируют о проблемах с правами доступа и настройкой среды выполнения docker-контейнеров.

Анализ текущей ситуации

  1. Проблемы с сокетами HCI: Ошибка "Can’t open HCI socket" указывает на то, что контейнер не может получить доступ к Bluetooth-устройствам хоста. Это может быть связано с тем, что контейнер запущен в ненастроенном сетевом режиме и не имеет необходимых прав.

  2. DBus: Ошибка "Couldn’t connect to DBus system bus" свидетельствует о том, что службы DBus не могут быть запущены или доступны в контейнере, что также мешает нам работать с Bluetooth.

Рекомендации по решению проблем

Чтобы добиться успешного выполнения Bluetooth-сканирования в Docker, даже в условиях ограничения, мы рекомендуем следующие шаги:

  1. Использование Privileged Mode:

    • Запуск контейнера с использованием флага --privileged, чтобы предоставить контейнеру доступ ко всем устройствам.
    • Это необязательно, но может помочь с обеспечением доступа к Bluetooth.
    docker run --privileged -it debian:jessie
  2. Сетевые настройки:

    • Измените сетевые настройки контейнера, если это возможно. Попробуйте использовать флаг --network host, который позволяет контейнеру использовать сетевые интерфейсы хоста.
  3. Установка и запуск службы Bluetooth:

    • Убедитесь, что в контейнере установлены необходимые пакеты BlueZ и службы Bluetooth запущены.
    apt-get update
    apt-get install bluetooth bluez
    service bluetooth start
  4. DBus:

    • Вам потребуется настроить систему DBus внутри контейнера для работы с Bluetooth. Попробуйте запустить следующий команду для запуска DBus:
    dbus-daemon --system
  5. Использование заданий Docker:

    • Применение существующих решений от сообщества, таких как монтирование /var/run/docker.sock и /dev, уже было упомянуто, но важно убедиться, что права доступа установлены так, чтобы обеспечить доступ к Bluetooth.
  6. Получение данных с помощью команд:

    • После успешной настройки среды, вы сможете использовать команды hcitool lescan и другие утилиты для работы с представленными Bluetooth-устройствами.

Заключение

Несмотря на серьезную природу ограничений, существует ряд подходов, которые можно использовать для настройки сред Docker, позволяющих работать с Bluetooth LE и стеком BlueZ. При этом важно учитывать уровень привилегий и сетевые настройки контейнера. Рекомендуется протестировать предложенные шаги на тестовом оборудовании, прежде чем переводить их в продуктивную среду.

В случае возникновения новых проблем, рекомендуется обратиться к сообществу Docker для получения дальнейших советов и рекомендаций.

Оцените материал
Добавить комментарий

Капча загружается...