当前位置: 首页 > 知识库问答 >
问题:

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

齐鸿光
2023-03-14

上次我检查时,Docker没有任何方法让容器访问主机串行或USB端口。有没有什么诀窍可以让你这么做?

共有3个答案

洪祺
2023-03-14

--设备会一直工作,直到您的USB设备拔出/重新插上插头,然后停止工作。您必须使用cgroup设备。让我们绕过它
您可以只使用-v/dev:/dev,但这是不安全的,因为它将主机中的所有设备映射到容器中,包括原始磁盘设备等等。基本上,这允许容器在主机上获得根,这通常不是您想要的
在这方面,使用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,并且不允许在容器中访问。

邢承弼
2023-03-14

使用当前版本的Docker,您可以使用--device标志实现所需功能,而无需访问所有USB设备。

例如,如果您只想在Docker容器中访问/dev/ttyUSB0,可以执行以下操作:

docker run -t -i --device=/dev/ttyUSB0 ubuntu bash
何飞翰
2023-03-14

有两种选择。您可以使用--device标志,该标志用于在没有--privileged模式的情况下访问USB设备:

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

或者,假设您的USB设备在/dev/bus/usb中的主机上运行驱动程序等,您可以使用特权模式和卷选项将其挂载到容器中。例如:

docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash

请注意,顾名思义,--privileged是不安全的,应小心处理。

 类似资料:
  • 问题内容: 上次我检查时,Docker没有任何方法允许容器访问主机串行或USB端口。有没有办法做到这一点? 问题答案: 有两种选择。您可以使用可用于访问无模式USB设备的标志: 或者,假设您的USB设备在主机上的驱动程序可用等情况下可用,则可以使用特权模式和volumes选项将其安装在容器中。例如: 请注意,顾名思义,它是不安全的 ,应谨慎处理。

  • 我正在尝试从连接到主机模式下的Android手机的USB设备中获取一些数据。我可以发送数据到它,但读取失败。 我一直从方法获得,它指示某种错误,它总是超时。也许问题来自于连接配置,我试了几次(读作:试错),没有一次奏效,令人惊讶的是,我不需要任何配置来发送数据到设备。 编辑 还必须注意的是,我使用的电缆是micro-USB到micro-USB的,它只能以一种方式工作,即只有当插头A连接到电话和插头

  • 当USB设备连接到Android平板电脑时,会出现一个弹出窗口,要求用户许可。我想抑制它,因为客户端不想要它。我应该怎么做? 在代码中: 调用以授予 USB 设备临时访问权限。 这会弹出一个弹出窗口。默认情况下,如何禁止弹出窗口或授予用户访问权限?

  • 问题内容: 当我以普通用户身份运行容器时,我可以映射 和修改 主机文件系统上root拥有的目录。这似乎是一个很大的安全漏洞。例如,我可以执行以下操作: 现在,我的 主机 文件系统将在键入时执行命令(大多数情况下无害)。我不敢相信这是理想的行为,但是它正在我的系统中发生(debian延伸)。该命令具有普通权限(755,不是setuid)。 我想念什么? 可能需要澄清更多。目前,我对容器本身的作用或可

  • 我在本地机器(Mac)上工作,其中有一个名为sqlvm的遗留虚拟机(这意味着我可以通过http://sqlvm:从本地主机访问这个虚拟机)。现在,我在应该连接到vm的同一个本地主机(我的Mac)中设置了几个docker容器(使用docker-compose)。< code>pymysql会引发一个异常: 如何将外部的“sqlvm”公开给内部 Docker 网络? 编辑:我尝试在yml文件中为相关容