问题
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 killbluez
(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
) andbluez
(/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