Dispositivos en contenedores de Windows

De forma predeterminada, los contenedores de Windows tienen un acceso mínimo a los dispositivos host, al igual que los contenedores de Linux. Hay ciertas cargas de trabajo en las que es ventajoso o, incluso, imperativo acceder a los dispositivos de hardware del host y comunicarse con ellos. En esta guía se explica qué dispositivos se admiten en contenedores y cómo empezar a usarlos.

Requisitos

Para que esta característica funcione, el entorno debe cumplir los siguientes requisitos:

  • El host de contenedor debe ejecutar Windows Server 2019 o Windows 10, versión 1809 o posterior.
  • La versión de la imagen base del contenedor debe ser 1809 o posterior.
  • Los contenedores deben ser contenedores de Windows que se ejecuten en modo de aislamiento de procesos.
  • El host de contenedor debe ejecutar Docker Engine 19.03 o una versión más reciente.

Ejecución de un contenedor con un dispositivo

Para iniciar un contenedor con un dispositivo, ejecuta el siguiente comando:

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

Tienes que reemplazar {interface class guid} por un GUID de la clase de interfaz de dispositivo adecuado, que puedes encontrar en la sección siguiente.

Para iniciar un contenedor con varios dispositivos, usa el siguiente comando y cadena juntos varios argumentos --device:

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

En Windows, todos los dispositivos declaran una lista de clases de interfaz que implementan. Al pasar este comando a Docker, se asegurará de que todos los dispositivos que detecte que implementan la clase solicitada estén asociados al contenedor.

Esto significa que no asignas el dispositivo fuera del host. En su lugar, el host lo comparte con el contenedor. Del mismo modo, dado que estás especificando un GUID de clase, todos los dispositivos que implementen ese GUID se compartirán con el contenedor.

Qué dispositivos se admiten

Actualmente se admiten los siguientes dispositivos (y sus GUID de clase de interfaz de dispositivo):

Tipo de dispositivo
GUID de clase de interfaz
GPIO
916EF1CB-8426-468D-A6F7-9AE8076881B3
Bus I2C
A11EE3C6-8421-4202-A3E7-B91FF90188E4
Puerto COM
86E0D1E0-8089-11D0-9CE4-08003E301F73
Bus SPI
DCDE6AF9-6610-4285-828F-CAAF78C424CC
Aceleración de GPU de DirectX
Consulta los documentos de Aceleración de GPU

Importante

La compatibilidad con los dispositivos depende del controlador. Si intentas pasar GUID de clase no definidos en la tabla anterior, se puede producir un comportamiento indefinido.

Compatibilidad con contenedores de Windows con aislamiento de Hyper-V

Actualmente no se admite la asignación de dispositivos ni el uso compartido de dispositivos para cargas de trabajo en contenedores de Windows con aislamiento de Hyper-V.

Compatibilidad con contenedores de Linux con aislamiento de Hyper-V

Actualmente no se admite la asignación de dispositivos ni el uso compartido de dispositivos para cargas de trabajo en contenedores de Linux con aislamiento de Hyper-V.