据我所知,
Docker没有任何方法让容器访问主机串行或USB端口
..。有什么技巧可以做到这一点吗?
发布于 2014-06-16 00:48:53
有几种选择。您可以使用
用户可用于访问USB设备的标志
模式:
docker run -t -i --device=/dev/ttyUSB0 ubuntu bash
或者,假设您的USB设备可用,并在主机上运行驱动程序等
,您可以使用以下命令将其挂载到容器中
特权模式
和
卷选项
..。例如:
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash
注意,顾名思义,
是
不安全
应该小心处理。
发布于 2015-05-13 12:05:14
在当前版本的Docker中,您可以使用
标志来实现你想要的,而不需要给所有USB设备访问权。
例如,如果您只想使
可以在Docker容器中访问,您可以执行以下操作:
docker run -t -i --device=/dev/ttyUSB0 ubuntu bash
发布于 2018-12-22 11:02:01
工作,直到您的USB设备被拔出/重新插入,然后它停止工作。你必须使用
cgroup devices.allow
绕过它。
你可以直接使用
但这是不安全的,因为它会将主机中的所有设备映射到容器中,包括原始磁盘设备等等。基本上,这允许容器在主机上获得根,这通常不是您想要的。
在这方面,使用cgroups方法更好,并且适用于在启动时在容器之后添加的设备。
请在此处查看详细信息:
不使用--privileged在Docker中访问USB设备
这有点难粘贴,但简而言之,你需要获取字符设备的主号并将其发送到cgroup:
189是/dev/ttyUSB的主机号
*
,您可以使用'ls -l‘获得它。在你的系统上和我的系统上可能会有所不同:
root@server:~# echo 'c 189:* rwm' > /sys/fs/cgroup/devices/docker/$A*/devices.allow
(A contains the docker containerID)
然后像这样启动你的容器:
docker run -v /dev/bus:/dev/bus:ro -v /dev/serial:/dev/serial:ro -i -t --entrypoint /bin/bash debian:amd64
如果不这样做,在容器启动后,任何新插入或重新启动的设备都将获得新的总线ID,并且不允许访问容器中的设备。
https://stackoverflow.com/questions/24225647
复制相似问题