Windows 主机的 docker 中的蓝牙

问题描述 投票:0回答:2

我的docker版本是:

docker --version

Docker version 20.10.2, build 2291f61

我的Windows版本是:

systeminfo

Nom du système d’exploitation:              Microsoft Windows 10 Professionnel
Version du système:                         10.0.17763 N/A version 17763
Type du système:                            x64-based PC

我的 Dockerfile 是:

FROM ubuntu:21.04
RUN apt update
RUN apt-get install -y bluez bluetooth usbutils

当我运行以下命令时,我启动“bluetooth_in_docker”容器:

docker build -t bluetooth_in_docker . & docker run --privileged --net=host -it bluetooth_in_docker bash

在容器内运行以下命令时,出现错误:

hciconfig dev

Can't open HCI socket.: Address family not supported by protocol
windows docker bluetooth
2个回答
0
投票

我从 WSL2 内部开始在 Windows 上运行它,但这需要很多步骤。

  • 关注https://github.com/dorssel/usbipd-win/discussions/310获取 您的蓝牙在 WSL2 中工作。验证您是否可以扫描 WSL2 发行版中的蓝牙设备。

  • 修改您的dockerfile以安装

    bluetooth
    ,就像您所做的那样(可能不需要bluez和usb-utils)

  • 现在有2个选择。第一个选项与容器共享蓝牙。第二个选项提供容器独占控制。

    1. 通过挂载 /var/run/dbus 卷并使用

      --privileged
      :

      运行它,可以在主机和容器之间共享蓝牙
      docker run -v /var/run/dbus/:/var/run/dbus/:z --privileged {containerImage}
      

      以这种方式运行容器时,请确保 dbus 和蓝牙服务在您的主机中正常工作。

    2. 给予容器独占控制权:在WSL2(主机)中,根据https://stackoverflow.com/a/64126744/1114918

      运行docker容器
    • 运行
      sudo service bluetooth stop
      使您的蓝牙不被主机“声明”(链接的答案使用
      killall
      ,我认为
      sudo service ... stop
      更干净)
    • 使用 sh 脚本启动容器内的 dbus 和蓝牙
    • 使用以下命令运行容器
      docker run --rm --net=host --privileged myimage:mytag
      

0
投票

确实,如果不通过 WSL2,似乎无法从 docker 访问主机蓝牙设备。

© www.soinside.com 2019 - 2024. All rights reserved.