Вопрос или проблема
Для конкретной задачи, мне не удается сканировать 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-контейнеров.
Анализ текущей ситуации
-
Проблемы с сокетами HCI: Ошибка "Can’t open HCI socket" указывает на то, что контейнер не может получить доступ к Bluetooth-устройствам хоста. Это может быть связано с тем, что контейнер запущен в ненастроенном сетевом режиме и не имеет необходимых прав.
-
DBus: Ошибка "Couldn’t connect to DBus system bus" свидетельствует о том, что службы DBus не могут быть запущены или доступны в контейнере, что также мешает нам работать с Bluetooth.
Рекомендации по решению проблем
Чтобы добиться успешного выполнения Bluetooth-сканирования в Docker, даже в условиях ограничения, мы рекомендуем следующие шаги:
-
Использование Privileged Mode:
- Запуск контейнера с использованием флага
--privileged
, чтобы предоставить контейнеру доступ ко всем устройствам. - Это необязательно, но может помочь с обеспечением доступа к Bluetooth.
docker run --privileged -it debian:jessie
- Запуск контейнера с использованием флага
-
Сетевые настройки:
- Измените сетевые настройки контейнера, если это возможно. Попробуйте использовать флаг
--network host
, который позволяет контейнеру использовать сетевые интерфейсы хоста.
- Измените сетевые настройки контейнера, если это возможно. Попробуйте использовать флаг
-
Установка и запуск службы Bluetooth:
- Убедитесь, что в контейнере установлены необходимые пакеты BlueZ и службы Bluetooth запущены.
apt-get update apt-get install bluetooth bluez service bluetooth start
-
DBus:
- Вам потребуется настроить систему DBus внутри контейнера для работы с Bluetooth. Попробуйте запустить следующий команду для запуска DBus:
dbus-daemon --system
-
Использование заданий Docker:
- Применение существующих решений от сообщества, таких как монтирование
/var/run/docker.sock
и/dev
, уже было упомянуто, но важно убедиться, что права доступа установлены так, чтобы обеспечить доступ к Bluetooth.
- Применение существующих решений от сообщества, таких как монтирование
-
Получение данных с помощью команд:
- После успешной настройки среды, вы сможете использовать команды
hcitool lescan
и другие утилиты для работы с представленными Bluetooth-устройствами.
- После успешной настройки среды, вы сможете использовать команды
Заключение
Несмотря на серьезную природу ограничений, существует ряд подходов, которые можно использовать для настройки сред Docker, позволяющих работать с Bluetooth LE и стеком BlueZ. При этом важно учитывать уровень привилегий и сетевые настройки контейнера. Рекомендуется протестировать предложенные шаги на тестовом оборудовании, прежде чем переводить их в продуктивную среду.
В случае возникновения новых проблем, рекомендуется обратиться к сообществу Docker для получения дальнейших советов и рекомендаций.