Docker-一种访问主机USB或串行设备的方法?

上次我检查时,Docker没有任何方法允许容器访问主机串行或USB端口。有没有办法做到这一点?


一只萌萌小番薯
浏览 4061回答 3
3回答

慕田峪9158850

有两种选择。您可以使用--device可用于访问无--privileged模式USB设备的标志:docker run -t -i --device=/dev/ttyUSB0 ubuntu bash或者,假设您的USB设备在主机上的驱动程序可用等情况下可用/dev/bus/usb,则可以使用特权模式和volumes选项将其安装在容器中。例如:docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash请注意,顾名思义,它--privileged是不安全的 ,应谨慎处理。

牛魔王的故事

对于当前版本的Docker,您可以使用该--device标志来实现所需的功能,而无需授予对所有USB设备的访问权限。例如,如果您只想/dev/ttyUSB0在Docker容器中进行访问,则可以执行以下操作:docker run -t -i --device=/dev/ttyUSB0 ubuntu bash

智慧大石

我想扩展已经给出的答案,以包括对未捕获的动态连接设备的支持,/dev/bus/usb以及如何在将Windows主机与boot2docker VM一起使用时如何使该设备正常工作。如果使用Windows,则需要在VirtualBox管理器中为要Docker访问的设备添加任何USB规则。为此,您可以通过运行以下命令来停止VM:host:~$ docker-machine stop default打开VirtualBox Manager,然后根据需要添加带有过滤器的USB支持。启动boot2docker VM:host:~$ docker-machine start default由于USB设备已连接到boot2docker VM,因此需要从该计算机上运行命令。使用VM打开终端并运行docker run命令:host:~$ docker-machine sshdocker@default:~$ docker run -it --privileged ubuntu bash请注意,以这种方式运行命令时,将仅捕获以前连接的USB设备。仅当您希望它与容器启动后连接的设备一起使用时,才需要volumes标志。在这种情况下,您可以使用:docker@default:~$ docker run -it --privileged -v /dev:/dev ubuntu bash请注意,在某些情况下,我不得不使用/dev而不是/dev/bus/usb来捕获类似的设备/dev/sg2。我只能假设对于/dev/ttyACM0或这类设备也是如此/dev/ttyUSB0。docker run命令也将与Linux主机一起使用。
打开App,查看更多内容
随时随地看视频慕课网APP