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


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

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

Необходимые условия

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

  • Хост контейнера должен работать под управлением Windows 10 версии 1809 или более поздней, либо Windows Server 2019.
  • Версия базового образа контейнера должна быть 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
ускорение графического процессора DirectX
См. документацию по ускорению GPU

Важный

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

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

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

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

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