上次我检查时,Docker没有任何方法让容器访问主机串行或USB端口。有没有什么诀窍可以让你这么做?
--设备
会一直工作,直到您的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,并且不允许在容器中访问。
使用当前版本的Docker,您可以使用--device
标志实现所需功能,而无需访问所有USB设备。
例如,如果您只想在Docker容器中访问/dev/ttyUSB0
,可以执行以下操作:
docker run -t -i --device=/dev/ttyUSB0 ubuntu bash
有两种选择。您可以使用--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端口。有没有什么诀窍可以让你这么做?
我正在尝试从连接到主机模式下的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文件中为相关容