docker run --device 和 docker run --volume 有什么区别?

时间:2020-12-31 22:27:23

标签: linux docker

如果在 linux 中一切都“只是”一个文件,那么 /dev 中的文件/节点与其他文件有何不同,使得 docker 必须以不同的方式处理它们? docker 对设备文件有什么不同?我希望它是更详细的绑定命令的简写?

事实上,在对设备文件(例如 --volume /dev/spidev0.0:/dev/spidev0.0 )进行常规绑定挂载后,用户在尝试访问设备时会在 docker 容器中获得“权限被拒绝”。通过 --device /dev/spidev0.0:/dev/spidev0.0 绑定时,它按预期工作。

1 个答案:

答案 0 :(得分:1)

Docker run reference 页面包含指向 cgroup device whitelist controller 上的 Linux 内核文档的链接。在多个方面,在容器中以 root 身份运行的进程比在主机上以 root 身份运行的同一进程受到的限制要多一些:如果没有特殊的额外权限(功能),您无法重新启动主机、挂载文件系统、创建虚拟 NIC 或任何其他各种系统管理任务。设备系统与能力系统是分开的,但本质上是相同的。

另一种思考方式是将其视为安全功能。容器通常不应该能够访问主机的文件系统或其他进程,即使它以 root 身份运行。但是如果容器进程可以mknod kmem c 1 2访问内核内存,或者mknod sda b 8 0猜测主机的硬盘看起来像一个SCSI磁盘,理论上它可以通过直接访问低级资源来摆脱这些限制。 cgroup 设备限制可以防止这种情况发生。

由于 Docker 旨在作为隔离系统,其中容器是无法访问主机资源的受限环境,因此运行需要物理设备或主机文件的任务充其量是不方便的。如果 Docker 的隔离特性没有意义,那么该进程可能会直接在主机上运行得更好,而不涉及 Docker。

相关问题