将 USB 设备添加到容器中

Discover tools, trends, and innovations in eu data.
Post Reply
roseline371274
Posts: 1281
Joined: Mon Dec 23, 2024 8:20 am

将 USB 设备添加到容器中

Post by roseline371274 »

虽然这看起来似乎不常见,但将 USB 设备添加到容器中非常有用。想象一下在您的容器中运行 Home Assistant,并在容器主机中拥有 Z-wave 或 Zigbee USB 记忆棒。有多种方法可以添加此功能,如果您不知道各种方法之间的区别,可能会有点困惑。在这篇博客中,我将描述两种将 USB 设备设置到容器的方法。

第一种方法是迄今为止最简单的:只需将“privileged:true”添加到您的docker-compose文件或将-privileged作为标志添加到docker run命令。这允许容器访问运行 docker 运行时引擎的主机的所有组件。显然这不是首选,因为您的容器可以访问系统上的每个块设备,甚至可以访问保存在内存中的密码。如果您不关心这种级别的安全性,那么这种方法是迄今为止最简单的解决方案。

第二种方法更安全,但可能会有点令人困惑。只需将您需要 加拿大号码数据 的设备(例如 /dev/ttyUSB1)添加为容器内的虚拟设备。在 docker compose 中它看起来像这样:

设备:
-/dev/ttyUSB1:/dev/ttyUSB1复制
请注意,这是一个简单的映射,使用 <actual_path_on_host>:<virtual_path_in_container>。为了使事情简单化,我们使用与实际路径相同的虚拟路径。很简单吧?但是有一个缺点:Linux 会在重启或添加 USB 记忆棒后随机生成 USB 记忆棒的设备名称。这就是为什么您不应该直接添加 /dev/<device>,而是使用包含 USB 设备唯一标识符的符号链接。

一起来看看我的ZZH吧!坚持在docker主机上。使用“dmesg”你可以看到它被映射到“ttyUSB1”

[1199309.256461] usb 2-1.2:新的 USB 设备字符串:Mfr=0、Product=2、SerialNumber=0
[1199309.256463] usb 2-1.2:产品:USB 串行
[1199309.256893] ch341 2-1.2:1.0: 检测到 ch341-uart 转换器
[1199309.257777] usb 2-1.2:ch341-uart 转换器现已连接到ttyUSB1复制
因此您可以在/dev/ttyUSB1 找到它。但是,如上所述,这可能会随机变化,因此我们来看看 /dev/serial/by-id



/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0

是始终指向我的ZZH的设备!戳。
因此让我们将这个符号链接添加到docker compose文件中,为了防止混淆,让我们重命名容器内的目标虚拟映射:

设备:
-/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:/dev/Virtual_ZZH_stick复制
现在容器将有一个 /dev/Virtual_ZZH_stick 设备,即使在重启或交换 USB 端口后,它也会自动映射到实际的 USB 棒。
Post Reply