Поделиться через


Устройства в контейнерах в Windows

По умолчанию контейнеры Windows, как и контейнеры Linux, получают минимальный доступ к устройствам узла. При этом для определенных рабочих нагрузок желательно (или даже обязательно) иметь доступ к аппаратным устройствам узла и возможность взаимодействия с ними. В этом руководстве рассказывается о том, какие устройства поддерживаются в контейнерах и как приступить к работе.

Требования

Чтобы эта функция работала, среда должна соответствовать следующим требованиям.

  • Узел контейнера должен работать под управлением Windows Server 2019 либо Windows 10 версии 1809 или более поздней.
  • Необходимо использовать базовый образ контейнера версии 1809 или более поздней.
  • Контейнеры должны быть контейнерами Windows, работающими в режиме изоляции процессов.
  • На узле контейнера должен быть установлен модуль Docker Engine 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
Ускорение с помощью GPU DirectX
См. документ Ускорение с помощью GPU

Важно!

Поддержка устройств зависит от драйвера. Попытка передать идентификаторы GUID класса, которые не определенные в приведенной выше таблице, может привести к неопределенному поведению.

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

Назначение устройства и общий доступ к нему для рабочих нагрузок в контейнерах Windows с изоляцией Hyper-V в настоящее время не поддерживается.

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

Назначение устройства и общий доступ к нему для рабочих нагрузок в контейнерах Linux с изоляцией Hyper-V в настоящее время не поддерживается.