我正在尝试给予容器访问主机上的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.
1条答案
按热度按时间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
。