前言
《Win10安装配置Docker》一文中,其中方法(4)是在Win10中安装WSL2 Linux系统,然后在Linux系统中安装Docker。
如果想要在Docker中使用Win10宿主机上的USB设备,该怎么做?本文中我们就来学习一下。
参考文档:
准备条件
- 运行 Windows 11 (内部版本 22000 或更高版本) 。 (可提供 Windows 10 支持,请参见下面的注释)
- 需要具有 x64/x86 处理器的计算机。 (arm64 目前不支持 usbipd-win) 。
- Linux 发行版已安装并设置为 WSL 2。
- 运行 Linux 内核 5.10.60.1 或更高版本。
升级Linux内核方法:
1、升级内核到最新版本wsl --update
2、重启电脑
安装 USBIPD-WIN 项目
WSL 本身并不支持连接 USB 设备,因此你需要安装开源 usbipd-win 项目。
1、转到 usbipd-win 项目的最新发布页。
2、选择 .msi 文件,该文件将下载安装程序。
3、运行下载的 usbipd-win_x.msi 安装程序文件。
安装 USBIP 工具和硬件数据库
USB/IP 项目完成安装后,需要安装用户空间工具和 USB 硬件标识符数据库。 这些说明适用于 Ubuntu — 其他分发版可能需要不同的 usbip 客户端包。
在 Ubuntu 上,运行以下命令:
1 | sudo apt install linux-tools-5.4.0-77-generic hwdata |
此时,一个服务正在 Windows 上运行以共享 USB 设备,并且在 WSL 中安装了必要的工具来连接到共享设备。
附加 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 | wsl -l -v |
此时可能报错:
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 设备(制表符与空格显示)。
使用 USB 设备
1、Ubuntu18中查看USB设备
1 | lsusb |
假设看到的结果为:
1 | Bus 002 Device 002: ID 2ba2:4d55 |
那么设备 2ba2:4d55 对应的路径为:
1 | /dev/bus/usb/002/002 |
2、挂载设备到容器中
1 | docker run --name test -d \ |
3、容器中查看USB设备
1 | lsusb |
至此,容器中的程序就可以正常访问USB设备了。