如何在WSL2 Windows主机上将USB设备挂载至Docker容器
在WSL2 Docker容器中挂载访问USB闪存盘的解决方案
前置准备
- 确认WSL2为最新版本,Windows主机已启用适用于Linux的Windows子系统和虚拟机平台功能
- 确保USB闪存盘在Windows系统中正常识别,已分配盘符(如
E:)
步骤1:在WSL2中挂载Windows的USB盘符
- 打开WSL2终端,创建挂载目录:
sudo mkdir /mnt/usb - 将Windows的USB盘符挂载到WSL2:
(把sudo mount -t drvfs E: /mnt/usbE:替换为你的USB实际盘符) - 验证挂载结果:
能看到USB内的文件即说明挂载成功。ls /mnt/usb
步骤2:在Docker容器中映射USB目录
启动容器时,直接将WSL2中已挂载的USB目录映射到容器内部:
docker run -it -v /mnt/usb:/container-usb --rm <你的镜像名称>
/container-usb是容器内的目标路径,可根据需求修改。进入容器后,访问该路径即可读取USB内的文件。
步骤3:获取USB设备序列号(若需硬件信息)
如果需要读取USB的硬件序列号,需将设备直接绑定到容器,操作如下:
- 在Windows主机的PowerShell中列出所有USB设备:
usbipd wsl list - 找到目标USB的BUSID(如
1-2),绑定到WSL2:usbipd wsl attach --busid 1-2 --auto-attach - 在WSL2终端中定位USB设备路径(通常为
/dev/sdX,如/dev/sdb):lsblk - 启动容器时同时绑定设备并挂载文件系统:
docker run -it -v /mnt/usb:/container-usb --device=/dev/sdb:/dev/sdb --rm <你的镜像名称> - 在容器内读取序列号(以
udevadm为例):udevadm info --query=property --name=/dev/sdb | grep SERIAL
常见问题排查
- 若
usbipd绑定无效,检查Windows防火墙是否拦截usbipd服务,或重启usbipd-win服务 - WSL2挂载失败时,确保以sudo权限执行mount命令,且Windows盘符未被占用
- 容器内无法访问设备时,可尝试添加
--privileged参数启动容器(注意此参数会赋予容器极高权限,谨慎使用)
内容的提问来源于stack exchange,提问作者Pavel S. Zaitsau
相关产品推荐
相关产品推荐

