如何在Ubuntu下将USB设备连接到Docker容器

iswrvxsc  于 2023-05-28  发布在  Docker
关注(0)|答案(1)|浏览(435)

我正在尝试给予容器访问主机上的USB设备。设备似乎存在,但docker在创建容器时似乎无法访问它。
有什么想法吗?
设备似乎存在:

$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Jun 21 20:47 /dev/ttyUSB0

这是Sonoff的Zigbee加密狗

$ ls -l /dev/serial/by-id
total 0
lrwxrwxrwx 1 root root 13 Jun 21 20:47 usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_1ec67e3b0b86ec11b4cd631719c2d21c-if00-port0 -> ../../ttyUSB0

但是当我试图将它传递给容器时(这里是一个简单的例子),我得到一个错误:

$ docker run --device /dev/ttyUSB0 alpine
docker: Error response from daemon: error gathering device information while adding custom device "/dev/ttyUSB0": no such file or directory.
ix0qys7i

ix0qys7i1#

您似乎没有访问该设备的权限,或者该设备未正确安装。有不同的方法使设备可用:
1.您可以通过添加--privileged作为运行时参数来给予Docker容器特权。如果您从容器内部检查/dev,您应该可以看到所有设备。如果容器用户没有root权限,则需要将您的用户添加到dialout组:sudo usermod -a -G dialout <user>。还要记住重新启动容器,以便正确应用组更改。
1.如果你想访问一个已经连接到主机的特定设备,而不给容器特权,你可以像以前一样使用运行时参数--device=/dev/ttyUSB0。同时将本地用户和容器用户添加到dialout组。
1.如果不想将用户添加到dialout,也可以使用--device--privileged,只更改ttyUSB0的文件权限(不推荐,更多用于调试):sudo chmod -R 0666 /dev/ttyUSB0
在您的情况下,我会尝试使用--privileged启动容器,以首先确定您是否从容器内部看到设备。另外,请检查本地和容器用户的groups

相关问题