【发布时间】:2016-05-24 20:42:39
【问题描述】:
我正在为需要直接访问 /dev/ttyACM0 的应用程序运行 docker 容器。因此,我使用--privileged 运行容器以允许它访问主机的/dev。
当操作员执行 docker run --privileged 时,Docker 会启用 访问主机上的所有设备以及设置一些配置 在 AppArmor 或 SELinux 中允许容器几乎完全相同 作为在容器外部运行的进程访问主机 主持人。
https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
但是,有时会在主机上为设备指定不同的名称(/dev/ttyACM1、/dev/ttyACM2),这会根据路径 /dev/ttyACM0 静态崩溃 Docker 应用程序。
因此,我创建了一个 udev 规则,该规则始终将设备映射到主机上的 /dev/mydevice,而不管 /dev/ttyACMx 是什么。但是在容器中无法访问到设备的链接。
host$ ls -la /dev/ttyACM1
crwxrwxrwx 1 root dialout 166, 1 Mai 24 22:33 /dev/ttyACM1
host$ ls -la /dev/mydevice
lrwxrwxrwx 1 root root 7 Mai 24 22:33 /dev/mydevice -> ttyACM1
container# ls -la /dev/ttyACM1
crwxrwxrwx 1 root dialout 166, 1 May 24 20:13 /dev/ttyACM1
container# ls -la /dev/mydevice
ls: cannot access /dev/mydevice: No such file or directory
上述方法有什么不妥之处?
【问题讨论】:
-
只是为了澄清一下-如果我理解正确,您是在 /dev/mydevice 上运行带有卷的容器?例如使用命令行参数
-v /dev/mydevice:/dev/mydevice?如果您使用 --device 标志,它似乎暂时不支持符号链接:github.com/docker/docker/issues/13840 -
@christophetd 更新了特权的定义