【问题标题】:Docker container in priviledged mode not showing udev symlinks处于特权模式的 Docker 容器不显示 udev 符号链接
【发布时间】: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 更新了特权的定义

标签: docker udev


【解决方案1】:

Docker 的 --privileged 在容器内创建一个 tmpfs 并重新创建当前在主机 /dev 中的所有设备节点。但是,它不会创建或更新来自主机 /dev 的符号链接。

但是,您可以使用 -v /dev:/dev 在容器内绑定 mount real /dev 以获取容器内的所有设备和符号链接(需要注意的是您在容器内公开了真正的 /dev)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 2020-05-13
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多