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

Jan*_*n15 6 linux docker

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

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

Dav*_*aze 9

Docker运行参考页面包含有关cgroup 设备白名单控制器的 Linux 内核文档的链接。在多种方面,在容器中以 root 身份运行的进程比在主机上以 root 身份运行的同一进程受到更多限制:如果没有特殊的附加权限(功能),您无法重新启动主机、挂载文件系统、创建虚拟机NIC 或任何其他系统管理任务。设备系统与能力系统是分开的,但其精神是一样的。

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

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