Dispositivos em contêineres no Windows

Por padrão, os contêineres do Windows recebem acesso mínimo aos dispositivos host, assim como os contêineres do Linux. Há determinadas cargas de trabalho em que é benéfico ou até mesmo imperativo acessar e se comunicar com dispositivos de hardware de host. Este guia aborda quais dispositivos têm suporte em contêineres e como começar.

Pré-requisitos

Para que esse recurso funcione, seu ambiente deve atender aos seguintes requisitos:

  • O host de contêiner deve estar executando o Windows Server 2019 ou o Windows 10, versão 1809 ou mais recente.
  • A versão da imagem base do contêiner deve ser 1809 ou posterior.
  • Seus contêineres devem ser contêineres do Windows em execução no modo isolado do processo.
  • O host de contêiner deve estar executando o Docker Engine 19.03 ou mais recente.

Executar um contêiner com um dispositivo

Para iniciar um contêiner com um dispositivo, use o seguinte comando:

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

Substitua {interface class guid} pelo GUID de classe de interface de dispositivo apropriado, que pode ser encontrado na seção abaixo.

Para iniciar um contêiner com vários dispositivos, use o seguinte comando e encadeie vários argumentos --device.

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

No Windows, todos os dispositivos declaram uma lista de classes de interface que implementam. Ao passar esse comando para o Docker, ele garantirá que todos os dispositivos que se identificarem como implementando a classe solicitada serão inseridos no contêiner.

Isso significa que você não está atribuindo o dispositivo para longe do host. Em vez disso, o host está compartilhando-o com o contêiner. Da mesma forma, como você está especificando um GUID de classe, todos os dispositivos que implementam esse GUID serão compartilhados com o contêiner.

Quais dispositivos têm suporte

Os seguintes dispositivos (e seus GUIDs da classe de interface do dispositivo) têm suporte hoje:

Tipo de dispositivo
GUID da classe de interface
GPIO
916EF1CB-8426-468D-A6F7-9AE8076881B3
Barramento I2C
A11EE3C6-8421-4202-A3E7-B91FF90188E4
Porta COM
86E0D1E0-8089-11D0-9CE4-08003E301F73
Barramento SPI
DCDE6AF9-6610-4285-828F-CAAF78C424CC
Aceleração de GPU do DirectX
Veja documentos de aceleração de GPU

Importante

O suporte ao dispositivo depende do driver. A tentativa de passar GUIDs de classe não definidas na tabela acima pode resultar em um comportamento indefinido.

Suporte para contêineres isolados do Hyper-V no Windows

Atualmente, não há suporte para atribuição de dispositivo e compartilhamento de dispositivos para cargas de trabalho em contêineres do Windows isolados do Hyper-V.

Suporte ao contêiner Linux isolado pelo Hyper-V

Atualmente, não há suporte para atribuição de dispositivos e compartilhamento de dispositivos para cargas de trabalho em contêineres linux isolados do Hyper-V.