Compartilhar via


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.