27.11.2025

Contêineres Docker privilegiados vs não privilegiados: diferença, segurança e exemplos de uso

Em Docker, os contêineres podem ser executados em dois modos principais: privileged e non-privileged. Essa escolha determina o nível de acesso que o contêiner terá aos recursos e funções do sistema do host. Compreender as diferenças entre esses modos é extremamente importante: disso depende tanto a segurança do seu sistema quanto o funcionamento dos aplicativos dentro dos contêineres. O modo non-privileged é adequado para a maioria das tarefas diárias, fornecendo isolamento e proteção ao host, enquanto o privileged concede ao contêiner acesso completo aos dispositivos, núcleo e interfaces de rede do host, necessário apenas em casos específicos, como teste de drivers ou gerenciamento de hardware. Uma escolha consciente do modo de execução ajuda a equilibrar funcionalidade e segurança.

Contêineres Non-privileged (padrão)

O que é:

Características:

Exemplos reais de uso: Serviços web, bancos de dados, aplicativos que não precisam alterar configurações do sistema do host.

Exemplo de execução:

docker run -it ubuntu:22.04 bash

Este contêiner é executado no modo non-privileged por padrão.

Contêineres Privileged

O que é:

O contêiner pode:

Características:

Exemplo de execução:

docker run --privileged -it ubuntu:22.04 bash

Quando usar:

  1. Para contêineres que precisam acessar dispositivos do host (por exemplo, USB, GPU).
  2. Para contêineres de sistema que emulam serviços do host.
  3. Para testes e depuração.

Diferenças de permissões

Característica Non-privileged Privileged
Acesso ao núcleo do host Não Sim
Acesso a dispositivos /dev Limitado Completo
Gerenciamento de módulos do núcleo Não Sim
Alteração de interfaces de rede do host Não Sim
Risco para a segurança Baixo Alto
Aplicação Aplicativos comuns, serviços Serviços de sistema, teste, acesso a dispositivos
Exemplo de execução docker run -it image bash docker run --privileged -it image bash

Recomendações

Na maioria dos casos, é melhor executar os contêineres no modo non-privileged — é seguro e ideal para aplicativos e serviços comuns que não precisam de acesso direto ao host. O modo privileged deve ser usado apenas quando realmente necessário, como quando seu aplicativo precisa gerenciar dispositivos, módulos do núcleo ou interfaces de rede do host. Mesmo nesses casos, é importante pensar na segurança e não conceder mais permissões do que o necessário. Frequentemente, uma boa alternativa ao `--privileged` completo é fornecer capabilities específicas via --cap-add ou acesso aos dispositivos necessários via --device, por exemplo:

docker run --cap-add=NET_ADMIN --device=/dev/sda1 -it ubuntu:22.04 bash

Dessa forma, você mantém o controle, aumenta a segurança e permite que o contêiner execute as tarefas necessárias sem riscos desnecessários.

Resumo rápido (Cheat Sheet)

Característica Non-privileged Privileged
Acesso ao núcleo do host Não Sim
Acesso a dispositivos /dev Limitado Completo
Gerenciamento de módulos do núcleo Não Sim
Alteração de interfaces de rede do host Não Sim
Risco para a segurança Baixo Alto
Aplicação Aplicativos comuns, serviços Serviços de sistema, teste, acesso a dispositivos
Exemplo de execução docker run -it image bash docker run --privileged -it image bash