首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Docker -一种访问主机USB或串行设备的方法?

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

Stack Overflow用户
提问于 2014-06-15 08:56:48
回答 10查看 251.6K关注 0票数 195

据我所知,

Docker没有任何方法让容器访问主机串行或USB端口

..。有什么技巧可以做到这一点吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2014-06-16 00:48:53

有几种选择。您可以使用

用户可用于访问USB设备的标志

模式:

代码语言:javascript
复制
docker run -t -i --device=/dev/ttyUSB0 ubuntu bash

或者,假设您的USB设备可用,并在主机上运行驱动程序等

,您可以使用以下命令将其挂载到容器中

特权模式

卷选项

..。例如:

代码语言:javascript
复制
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash

注意,顾名思义,

不安全

应该小心处理。

票数 268
EN

Stack Overflow用户

发布于 2015-05-13 12:05:14

在当前版本的Docker中,您可以使用

标志来实现你想要的,而不需要给所有USB设备访问权。

例如,如果您只想使

可以在Docker容器中访问,您可以执行以下操作:

代码语言:javascript
复制
docker run -t -i --device=/dev/ttyUSB0 ubuntu bash
票数 83
EN

Stack Overflow用户

发布于 2018-12-22 11:02:01

工作,直到您的USB设备被拔出/重新插入,然后它停止工作。你必须使用

cgroup devices.allow

绕过它。

你可以直接使用

但这是不安全的,因为它会将主机中的所有设备映射到容器中,包括原始磁盘设备等等。基本上,这允许容器在主机上获得根,这通常不是您想要的。

在这方面,使用cgroups方法更好,并且适用于在启动时在容器之后添加的设备。

请在此处查看详细信息:

不使用--privileged在Docker中访问USB设备

这有点难粘贴,但简而言之,你需要获取字符设备的主号并将其发送到cgroup:

189是/dev/ttyUSB的主机号

*

,您可以使用'ls -l‘获得它。在你的系统上和我的系统上可能会有所不同:

代码语言:javascript
复制
root@server:~# echo 'c 189:* rwm' > /sys/fs/cgroup/devices/docker/$A*/devices.allow  
(A contains the docker containerID)

然后像这样启动你的容器:

代码语言:javascript
复制
docker run -v /dev/bus:/dev/bus:ro -v /dev/serial:/dev/serial:ro -i -t --entrypoint /bin/bash debian:amd64

如果不这样做,在容器启动后,任何新插入或重新启动的设备都将获得新的总线ID,并且不允许访问容器中的设备。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24225647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档