一个计算机技术爱好者与学习者

0%

好好学Docker:Win10中的Docker使用USB设备

1. 前言

《Win10安装配置Docker》一文中,其中方法(4)是在Win10中安装WSL2 Linux系统,然后在Linux系统中安装Docker。

如果想要在Docker中使用Win10宿主机上的USB设备,该怎么做?本文中我们就来学习一下。

参考文档:

2. 准备条件

  • 运行 Windows 11 (内部版本 22000 或更高版本) 。 (可提供 Windows 10 支持,请参见下面的注释)
  • 需要具有 x64/x86 处理器的计算机。 (arm64 目前不支持 usbipd-win) 。
  • Linux 发行版已安装并设置为 WSL 2
  • 运行 Linux 内核 5.10.60.1 或更高版本

升级Linux内核方法:
1、升级内核到最新版本wsl --update
2、重启电脑

3. 安装 USBIPD-WIN 项目

WSL 本身并不支持连接 USB 设备,因此你需要安装开源 usbipd-win 项目。

1、转到 usbipd-win 项目的最新发布页
2、选择 .msi 文件,该文件将下载安装程序。
3、运行下载的 usbipd-win_x.msi 安装程序文件。

4. 安装 USBIP 工具和硬件数据库

USB/IP 项目完成安装后,需要安装用户空间工具和 USB 硬件标识符数据库。 这些说明适用于 Ubuntu — 其他分发版可能需要不同的 usbip 客户端包

在 Ubuntu 上,运行以下命令:

1
2
sudo apt install linux-tools-5.4.0-77-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20

此时,一个服务正在 Windows 上运行以共享 USB 设备,并且在 WSL 中安装了必要的工具来连接到共享设备。

5. 附加 USB 设备

在附加 USB 设备之前,请确保 WSL 命令行已打开。 这将使 WSL 2 轻型 VM 保持活动状态。

1、通过以管理员模式打开 PowerShell 并输入以下命令,列出所有连接到 Windows 的 USB 设备:

1
usbipd wsl list

可以看到BUSID、VID:PID、DEVICE、STATE,其中STATE都是Not attached。

注意:设备连接不同的USB端口,BUSID也是不同的。

2、选择要附加到 WSL 的设备总线 ID,然后运行下面的命令。

1
2
3
4
wsl -l -v
wsl --set-default Ubuntu-18.04
usbipd wsl attach --busid <busid>
usbipd wsl attach -d Ubuntu-18.04 --busid <busid>

此时可能报错:
usbip: error: Attach Request for 1-24 failed - Device in error state
usbipd: error: Failed to attach device with busid ‘1-24’.

请检查确认想要挂载的设备busid是否正确,如果是正确的设备busid,一般可以正常挂载。

3、打开 Ubuntu(或首选的 WSL 命令行),使用以下命令列出附加的 USB 设备:

1
lsusb

你应会看到刚刚附加的设备,并且能够使用常规 Linux 工具与之交互。
其中设备的 ID 对应Win10中看到的 VID:PID 。
根据你的应用程序,你可能需要配置 udev 规则以允许非根用户访问设备。

4、在 WSL 中完成设备使用后,可物理断开 USB 设备,或者在管理员模式下从 PowerShell 运行此命令:

1
usbipd wsl detach --busid <busid>

若要详细了解此操作的工作原理,请参阅 Windows 命令行博客GitHub 上的 usbipd-win 存储库

有关视频演示,请参阅 WSL 2:连接 USB 设备(制表符与空格显示)

6. 使用 USB 设备

1、Ubuntu18中查看USB设备

1
lsusb

假设看到的结果为:

1
2
3
Bus 002 Device 002: ID 2ba2:4d55
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

那么设备 2ba2:4d55 对应的路径为:

1
/dev/bus/usb/002/002

2、挂载设备到容器中

1
2
3
docker run --name test -d \
-v /dev/bus/usb:/dev/bus/usb \
busybox sleep 7200

3、容器中查看USB设备

1
lsusb

至此,容器中的程序就可以正常访问USB设备了。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-win10-docker-usb/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~