Windows 上的容器中的设备

默认情况下,Windows 容器被授予对主机设备的最小访问权限,就像 Linux 容器一样。 在某些工作负荷中,访问主机硬件设备并与之通信是有益的,甚至是必要的。 本指南介绍了容器中支持哪些设备以及如何开始使用。

要求

要使此功能生效,你的环境必须满足以下要求:

  • 容器主机必须运行 Windows Server 2019 或 Windows 10 版本 1809 或更高版本。
  • 容器基础映像版本必须是 1809 或更高版本。
  • 容器必须是在进程隔离模式下运行的 Windows 容器。
  • 容器主机必须运行 Docker 引擎 19.03 或更高版本。

运行包含设备的容器

若要启动包含设备的容器,请使用以下命令:

docker run --isolation=process --device="class/{interface class GUID}" mcr.microsoft.com/windows/servercore:1809

必须将 {interface class guid} 替换为合适的设备接口类 GUID,这可以在以下部分找到。

若要启动包含多个设备的容器,请使用以下命令并将多个 --device 参数串在一起:

docker run --isolation=process --device="class/{interface class GUID}" --device="class/{interface class GUID}" mcr.microsoft.com/windows/servercore:1809

在 Windows 中,所有设备都声明其实现的接口类的列表。 将此命令传递给 Docker 即可确保所有确定用于实现所请求类的设备都将插入到容器中。

这意味着会将设备分配到主机之外, 而是让主机与容器共享设备。 同样,因为指定了类 GUID,所以,将与容器共享所有实现了该 GUID 的设备。

支持哪些设备

目前支持以下设备(及其设备接口类 GUID):

设备类型
接口类 GUID
GPIO
916EF1CB-8426-468D-A6F7-9AE8076881B3
I2C 总线
A11EE3C6-8421-4202-A3E7-B91FF90188E4
COM 端口
86E0D1E0-8089-11D0-9CE4-08003E301F73
SPI 总线
DCDE6AF9-6610-4285-828F-CAAF78C424CC
DirectX GPU 加速
请参阅 GPU 加速文档

重要

设备支持依赖于驱动程序。 尝试传递上表中未定义的类 GUID 可能会导致未定义的行为。

Hyper-V 隔离 Windows 容器支持

目前不支持为 Hyper-V 隔离 Windows 容器中的工作负荷进行设备分配和设备共享。

Hyper-V 隔离 Linux 容器支持

目前不支持为 Hyper-V 隔离 Linux 容器中的工作负荷进行设备分配和设备共享。