是否可以将 USB 设备暴露给 LXC/Docker 容器?

Posted

技术标签:

【中文标题】是否可以将 USB 设备暴露给 LXC/Docker 容器?【英文标题】:Is it possible to expose a USB device to an LXC/Docker container? 【发布时间】:2013-07-21 11:00:29 【问题描述】:

我有一个包含在 Docker 文件中的嵌入式系统开发映像。为了刷新代码,我需要通过 USB 串行连接到节点(例如 /dev/ttyACM0)。

在 Docker 中,我使用了新的绑定挂载功能(参见 https://github.com/dotcloud/docker/issues/111、-b 或最近的 -v 选项)将主机 devfs 公开给容器。但是,每当我连接(“cat /d/ttyACM0”,d 是绑定到 dev 的安装)到设备时,我都会得到“不允许操作”。是不是不仅可以绑定mount,还可以在容器中实际使用字符设备?

是否有可能通过 udev 规则公开特定的开发人员?

【问题讨论】:

什么是"lately" 【参考方案1】:

目前,这在 Docker 中是不可能的。但是,我们正在开发一种“特权”模式,允许容器访问 USB 或 GPU 等设备。

【讨论】:

【参考方案2】:

--device 选项现在允许将 /dev 暴露给容器,例如:

docker run -t -i --device=/dev/ttyUSB0 ubuntu bash

(我从this Stack Overflow answer找到的。)

【讨论】:

谢谢 - 我在这里复制了重要部分。我相信我至少回答了部分问题(“是否不仅可以绑定挂载,还可以在容器中实际使用字符设备?”)。【参考方案3】:

虽然无法通过 Docker 本身(请参阅上一个答案)直接在正在运行的容器上使用 lxc-cgroup 似乎对我有用:

sudo lxc-cgroup -n 0dd4c652d0740e5ddb6f80e6f2ec2c52dd6435b22c8114c000c58ca9703ebc62 devices.allow "c 166:* rwm"

166 代表 ttyACM,设备类。

Docker id 必须是完整的(通过 Docker 检查“ID”)。

【讨论】:

请注意,同时依赖 docker 和 LXC 命令是危险的。虽然 docker 使用了 LXC,但据我所知,将来可能不会,并且不保证兼容性。

以上是关于是否可以将 USB 设备暴露给 LXC/Docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章

并口转USB打印机无法打印 打印已经识别

是否有类似 USB 设备的 URI?

是否可以通过从集线器到 USB 端口的 USB 测试移动设备

如何检测python上连接了新的usb设备

将 goto 标签暴露给符号表

是否可以将 Android 编程为物理 USB 键盘?