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