Bra*_*rad 7 linux bluetooth docker
是否可以在docker容器内使用蓝牙(在我的情况下为BLE)加密狗?
在我的主机上:
$ hcitool dev
Devices:
hci0 5C:F3:70:64:F0:11
Run Code Online (Sandbox Code Playgroud)
在Docker里面它找不到任何东西.我正在运行Docker:
sudo docker run --privileged -i -t ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)
我对Linux中的蓝牙子系统了解不足以了解主机和docker之间的区别.
该hci0设备确实出现在两个系统中:
$ 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
Run Code Online (Sandbox Code Playgroud)
有人试图在Docker中使用蓝牙吗?
小智 10
我可以确认 OlivierM 写的内容对我有效。花了一些时间研究 Raspberry Pi 3B+ 及其内置蓝牙。
Dockerfile:
FROM python:3.7
RUN apt-get update
RUN apt-get install -y bluez bluetooth
ENTRYPOINT sh docker_entrypoint.sh
Run Code Online (Sandbox Code Playgroud)
和入口点:
#!/bin/bash
service dbus start
bluetoothd &
/bin/bash
Run Code Online (Sandbox Code Playgroud)
sudo killall -9 bluetoothd在启动容器之前,主机上需要:
docker run --rm --net=host --privileged -it myimage:mytag
Run Code Online (Sandbox Code Playgroud)
尝试这个:
sudo docker run --net=host --privileged -i -t ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)
我发现有两种方法可以做到这一点:
主机和容器之间共享蓝牙访问。此模式是通过/var/run/dbus与容器共享卷挂载来完成的。这意味着容器也将使用主机的 dbus。容器不应启动自己的 dbus 或蓝牙服务 - 这应该在主机中完成。它使docker_entrypoint.sh脚本变得多余。显示此方法的教程位于https://www.raspberrypi-bluetooth.com/bluetooth-application-in-python.html
方法:
--privileged:
docker run -v /var/run/dbus/:/var/run/dbus/:z --privileged {containerImage}
Run Code Online (Sandbox Code Playgroud)
通过容器独占访问蓝牙。这需要停止主机中的蓝牙服务(否则容器无法“声明”它)。这个方法可以跟上面的答案一样
如果您想bluez从 docker运行(而不仅仅是公开hci适配器),您需要:
sudo docker run --privileged -i -t your_image_name /bin/bashbluez没有在您的主机上运行。在我的情况下,我添加了 kill bluez( killall -9 bluetoothd) (并没有正确停止它,因为它会关闭我的蓝牙适配器并且不会将它暴露在 docker 中)dbus( /etc/init.d/dbus start) 和bluez( /usr/libexec/bluetooth/bluetoothd --debug &)| 归档时间: |
|
| 查看次数: |
9067 次 |
| 最近记录: |