是否可以将 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 容器?的主要内容,如果未能解决你的问题,请参考以下文章