Устройства в контейнерах в WindowsDevices in Containers on Windows

По умолчанию контейнеры Windows, как и контейнеры Linux, получают минимальный доступ к устройствам узла.By default, Windows containers are given minimal access to host devices--just like Linux containers. При этом для определенных рабочих нагрузок желательно (или даже обязательно) иметь доступ к аппаратным устройствам узла и возможность взаимодействия с ними.There are certain workloads where it is beneficial--or even imperative--to access and communicate with host hardware devices. В этом руководстве рассказывается о том, какие устройства поддерживаются в контейнерах и как приступить к работе.This guide covers which devices are supported in containers and how to get started.

ТребованияRequirements

Чтобы эта функция работала, среда должна соответствовать следующим требованиям.For this feature to work, your environment must meet the following requirements:

  • Узел контейнера должен работать под управлением Windows Server 2019 либо Windows 10 версии 1809 или более поздней.The container host must be running Windows Server 2019 or Windows 10, version 1809 or newer.
  • Необходимо использовать базовый образ контейнера версии 1809 или более поздней.Your container base image version must be 1809 or later.
  • Контейнеры должны быть контейнерами Windows, работающими в режиме изоляции процессов.Your containers must be Windows containers running in process-isolated mode.
  • На узле контейнера должен быть установлен модуль Docker Engine 19.03 или более поздней версии.The container host must be running Docker Engine 19.03 or newer.

Запуск контейнера с устройствомRun a Container with a Device

Чтобы запустить контейнер с устройством, выполните следующую команду:To start a container with a device, use the following command:

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

Необходимо заменить {interface class guid} соответствующим идентификатором GUID класса интерфейса устройства, который указан в следующем разделе.You must replace the {interface class guid} with an appropriate device interface class GUID, which can be found in the section below.

Чтобы запустить контейнер с несколькими устройствами, используйте следующую команду и строку с несколькими аргументами --device:To start a container with multiple devices, use the following command and string together multiple --device arguments:

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

В Windows все устройства объявляют список классов интерфейса, которые они реализуют.In Windows, all devices declare a list of interface classes that they implement. Передача этой команды в Docker гарантирует, что все устройства, которые определяются как реализующие запрошенный класс, будут подключены к контейнеру.By passing this command to Docker, it will ensure that all devices which identify as implementing the requested class will be plumbed into the container.

Так можно избежать назначения устройства за пределами узла.This means you are not assigning the device away from host. Вместо этого узел предоставляет контейнеру общий доступ к этому устройству.Instead, the host is sharing it with the container. Аналогично, поскольку вы указываете GUID класса, все устройства, которые реализуют этот GUID, будут использоваться совместно с контейнером.Likewise, because you are specifying a class GUID, all devices that implement that GUID will be shared with the container.

Поддерживаемые устройстваWhat Devices are Supported

На сегодняшний день поддерживаются следующие устройства (и их GUID класса интерфейса устройств).The following devices (and their device interface class GUIDs) are supported today:

Тип устройства
Device Type
GUID класса интерфейса
Interface Class GUID
GPIO
GPIO
916EF1CB-8426-468D-A6F7-9AE8076881B3
916EF1CB-8426-468D-A6F7-9AE8076881B3
Шина I2C
I2C Bus
A11EE3C6-8421-4202-A3E7-B91FF90188E4
A11EE3C6-8421-4202-A3E7-B91FF90188E4
Порт COM
COM Port
86E0D1E0-8089-11D0-9CE4-08003E301F73
86E0D1E0-8089-11D0-9CE4-08003E301F73
Шина SPI
SPI Bus
DCDE6AF9-6610-4285-828F-CAAF78C424CC
DCDE6AF9-6610-4285-828F-CAAF78C424CC
Ускорение с помощью GPU DirectX
DirectX GPU Acceleration
См. документ Ускорение с помощью GPU
See GPU acceleration docs

Важно!

Поддержка устройств зависит от драйвера.Device support is driver-dependent. Попытка передать идентификаторы GUID класса, которые не определенные в приведенной выше таблице, может привести к неопределенному поведению.Attempting to pass class GUIDs not defined in the table above may result in undefined behavior.

Поддержка контейнеров Windows с изоляцией Hyper-VHyper-V-isolated Windows Container Support

Назначение устройства и общий доступ к нему для рабочих нагрузок в контейнерах Windows с изоляцией Hyper-V в настоящее время не поддерживается.Device assignment and device sharing for workloads in Hyper-V-isolated Windows containers is not currently supported.

Поддержка контейнеров Linux с изоляцией Hyper-VHyper-V-isolated Linux Container Support

Назначение устройства и общий доступ к нему для рабочих нагрузок в контейнерах Linux с изоляцией Hyper-V в настоящее время не поддерживается.Device assignment and device sharing for workloads in Hyper-V-isolated Linux containers is not currently supported.