【问题标题】:Where to install device drivers to make docker recognize the device?在哪里安装设备驱动才能让docker识别设备?
【发布时间】:2015-04-22 20:22:41
【问题描述】:

我在 ubuntu 上运行了一些二进制文件,用于控制各种设备,例如板载/usb wifi/蓝牙芯片。有些芯片需要额外的驱动程序。

我的猜测是仅仅将驱动程序安装到 docker 映像是不够的,主机操作系统必须有驱动程序。这是正确的吗?

如果是,为什么 docker 映像需要任何驱动程序,如果主机已经这样做了? docker image 如何正确委托给主机?这些是否需要为每个主机操作系统上的每个驱动程序进行硬编码?

同样从这个角度来看,docker 是否需要比 VM 更多或更少的硬编码?

我觉得答案可能取决于设备如何呈现给 docker 以及驱动程序必须在哪里运行(例如内核空间与用户空间)。

谢谢!

【问题讨论】:

    标签: wifi docker virtual-machine driver


    【解决方案1】:

    这取决于设备和驱动程序。大多数驱动程序都需要内核的一些支持,在这些情况下,您的主机内核必须提供该功能。某些驱动程序的功能、依赖库和应用程序可能在用户空间中实现(例如软件包 libusb、usbutils...),并且您的容器应该安装这些软件包。而且,在运行容器时,您必须明确指示 Docker 映射容器中的设备(任何 /dev/*)。你有两个选择:

    1. 使用docker run 和选项--device
    2. 在特权模式下使用docker run 将设备映射为卷(选项-v--privileged=true

    【讨论】:

    • 您好 Javier,您的回答建议 docker 容器调用主机操作系统的用户空间功能来访问设备。所以这些必须在某个地方硬编码吗?
    • 另一种选择是设备在本机初始化到容器时。这避免了委托,但在多个容器之间存在同步问题。无论哪种方式,是否有任何源代码或文档可以证明其中之一?谢谢!
    • 大多数驱动程序都是在内核空间中实现的,并且必须安装在主机中。但是需要安装一些工具/实用程序才能使用用户空间中的一些硬件,这些需要安装在容器中。并且使用选项--device--privileged -v 将硬件的访问和并发使用委托给主机内核。我认为多个容器之间不应该存在同步问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2015-01-23
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多