如何在Ubuntu 20.04 Docker容器中安装USBIP并解决特定内核依赖包无法找到的问题
解决Ubuntu 20.04 Docker容器中USBIP兼容WSL2内核的问题
这个问题本质是WSL2使用的是微软定制的内核,而Ubuntu官方apt仓库里的linux-tools系列包只适配Ubuntu官方发布的内核,自然找不到提示里的那些微软内核对应的工具包。下面给你两种可行的解决思路:
方法一:借助WSL2宿主机的USBIP工具(最简单)
因为Docker容器会共享宿主机的内核,所以我们可以在WSL2宿主机上装好兼容的USBIP工具,再让容器直接复用这些工具:
先把WSL2内核更到最新版本
打开Windows的PowerShell,执行以下命令更新内核并重启WSL:wsl --update wsl --shutdown之后重新打开你的WSL2 Ubuntu终端。
在WSL2宿主机安装USBIP工具
在宿主机的Ubuntu终端里执行:sudo apt update sudo apt install usbip usbutils安装完成后可以用
usbip --version验证工具是否能正常运行。启动容器时挂载宿主机的USBIP资源
运行Docker容器时,添加挂载参数把宿主机的USBIP二进制文件和套接字映射到容器里,同时开启特权模式(确保容器能访问USB设备):docker run -it --privileged -v /usr/bin/usbip:/usr/bin/usbip -v /var/run/usbipd.sock:/var/run/usbipd.sock ubuntu:20.04这样容器里就能直接使用宿主机的USBIP工具,完美适配WSL2内核。
方法二:在容器中编译对应版本的USBIP工具(适合独立环境)
如果需要容器内独立安装USBIP,可以手动编译对应内核版本的工具:
安装编译依赖
在容器内执行:sudo apt update sudo apt install git build-essential linux-headers-generic libudev-dev克隆对应版本的Linux内核源码
你的内核版本是5.10.16.3-microsoft-standard-WSL2,所以克隆5.10.16分支的内核源码:git clone --depth 1 --branch v5.10.16 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git cd linux/tools/usb/usbip编译并安装USBIP
执行编译和安装命令:make sudo make install完成后用
usbip --version确认安装成功。
额外注意事项
- 要让WSL2能识别USB设备,你还需要在Windows端安装
usbipd-win工具,之后用PowerShell绑定设备到WSL2:# 列出可用USB设备 usbipd wsl list # 绑定指定设备到WSL2,替换<BUSID>为实际设备ID usbipd wsl attach --busid <BUSID> - 容器必须以
--privileged模式运行,或者添加精确的设备权限,否则无法访问USB设备资源。
内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

