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 容器中工作负荷的设备分配和设备共享。