Accessing Bluetooth dongle from inside Docker?

痞子三分冷 提交于 2021-01-20 19:31:15

问题


Is it possible to use a bluetooth (BLE in my case) dongle inside of a docker container?

On my host machine:

$ hcitool dev
    Devices:
       hci0   5C:F3:70:64:F0:11

Inside of Docker it doesn't find anything. I'm running Docker as:

sudo docker run --privileged -i -t ubuntu /bin/bash

I don't know enough about the bluetooth subsystem in Linux to understand what is different between the host and docker.

The hci0 device does show up in both systems:

$ ls -l /sys/class/bluetooth
lrwxrwxrwx  1 root root 0 Mar  5 01:23 hci0 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-2/2-2.3/2-2.3:1.0/bluetooth/hci0

Anyone try to use bluetooth inside of Docker?


回答1:


Try this:

sudo docker run --net=host --privileged -i -t ubuntu /bin/bash




回答2:


If you want to run bluez from a docker (and not only expose hci adapter) you need:

  • To start your docker with sudo docker run --privileged -i -t your_image_name /bin/bash
  • Make sure bluez is not running on your host. In my case I add to kill bluez (killall -9 bluetoothd) (and not stopped it properly as it will power down my bluetooth adapter and will not exposed it into the docker)
  • In your docker entrypoint, you will need to start dbus (/etc/init.d/dbus start) and bluez (/usr/libexec/bluetooth/bluetoothd --debug &)



回答3:


I can confirm that what OlivierM wrote is working on me. Spent some time on Raspberry Pi 3B+ and its built-in bluetooth.

Dockerfile:

FROM python:3.7

RUN apt-get update

RUN apt-get install -y bluez bluetooth

ENTRYPOINT sh docker_entrypoint.sh

and entrypoint:

#!/bin/bash

service dbus start
bluetoothd &

/bin/bash

sudo killall -9 bluetoothd is needed on host machine before before starting the container:

docker run --rm --net=host --privileged -it myimage:mytag



回答4:


With help from Docker Community, I have Successfully Started DBus/Bluetooth Services inside docker container and scan bluetooth devices by adding --cap-add=SYS_ADMIN, --cap-add=NET_ADMIN and --net=host flags/permission

docker run --cap-add=SYS_ADMIN --cap-add=NET_ADMIN --net=host -it debian:jessie

Now just looking to start bluetooth service by "Not sharing the Host Networking Namespace" (customising --net=host to private network)

If somebody got any Clue, that would be helpful. Thanks.



来源:https://stackoverflow.com/questions/28868393/accessing-bluetooth-dongle-from-inside-docker

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!