Tutoriel Linux

Podman no Linux: iniciar um contêiner sem dar direitos de root a toda a máquina

Débutant4 min de lecture

Você quer iniciar um serviço de teste, uma ferramenta web ou uma imagem Linux sem adicionar sua conta ao grupo docker. Podman consegue executar contêineres a partir de uma sessão de usuário, com armazenamento e processos ligados ao seu UID. Isso é prático para começar de maneira limpa, mas não dispensa o controle da imagem, dos volumes nem das portas publicadas.

Tux admin lança um contêiner isolado perto de um servidor Linux com um cadeado e cubos de contêiner
Podman pode executar contêineres a partir de uma sessão de usuário Linux.

Instalar Podman e verificar o modo rootless

No Debian ou Ubuntu, instale o pacote a partir dos repositórios da sua distribuição. O Fedora também o inclui em seus repositórios padrão.

sudo apt update
sudo apt install podman
podman --version
podman info --debug

Em seguida, execute podman info --debug com sua conta habitual, sem sudo. A saída deve indicar um contexto rootless. O Podman utiliza então seu espaço de usuário e as faixas definidas em /etc/subuid e /etc/subgid para mapear os identificadores do contêiner.

Uma mensagem sobre newuidmap, subuid ou subgid sinaliza uma preparação incompleta. Não contorne o erro alternando diretamente para root. Verifique primeiro sua entrada com o seguinte comando, e depois aplique o método documentado pela sua distribuição caso falte.

grep "^$USER:" /etc/subuid /etc/subgid

Iniciar um primeiro contêiner sem privilégios

Comece com uma imagem minúscula e um comando que se encerra por conta própria. Assim, você verifica o download da imagem, o armazenamento local e a execução sem deixar um serviço aberto na rede.

podman run --rm docker.io/library/alpine:latest echo "Podman funciona"

A opção --rm remove o contêiner ao sair. A imagem fica em cache. Para ver as imagens e os contêineres, incluindo aqueles que estão parados, utilize:

podman images
podman ps -a

Para um serviço que deve permanecer disponível, dê a ele um nome explícito. Este exemplo inicia o nginx em segundo plano e publica a porta 8080 apenas na máquina local.

podman run -d --name web-test 
  -p 127.0.0.1:8080:80 
  docker.io/library/nginx:alpine

podman ps
curl -I http://127.0.0.1:8080

O prefixo 127.0.0.1: evita expor este teste em todas as interfaces de rede. Se você escrever apenas -p 8080:80, verifique o resultado com podman port web-test e com ss -ltnp. Em um servidor, abra uma porta pública somente após escolher o firewall e o endereço de escuta.

Ler o estado, os logs e parar o serviço corretamente

Um contêiner iniciado não prova que a aplicação está respondendo. Verifique seu estado, os últimos logs e seu mapeamento de rede antes de modificar a imagem ou a configuração.

podman inspect web-test --format '{{.State.Status}}'
podman logs --tail 50 web-test
podman port web-test
podman stop web-test
podman rm web-test

podman inspect exibe os parâmetros realmente aplicados. É mais confiável do que reler um comando copiado do seu histórico. Mantenha também o nome da imagem e seu tag em sua documentação. Um tag latest pode apontar para uma versão diferente na próxima descarga. Para um uso duradouro, escolha uma versão precisa e planeje sua atualização.

As limitações do rootless e as armadilhas a evitar

  • Um contêiner rootless limita o impacto no host, mas uma imagem não confiável, um segredo injetado como variável ou um volume em escrita ainda são riscos.
  • Evite --privileged, --network host e os montagens de diretórios sensíveis. Essas opções reduzem fortemente a isolação.
  • Monte os dados como somente leitura quando a aplicação não precisa modificá-los, por exemplo -v "$HOME/site:/usr/share/nginx/html:ro".
  • As portas abaixo de 1024, alguns dispositivos e algumas restrições de rede requerem uma configuração adicional. Não adicione privilégios por reflexo.
  • Podman aceita grande parte da sintaxe do Docker, mas os serviços, as redes e o armazenamento não se comportam sempre da mesma forma. Teste um projeto em uma pasta isolada antes de uma migração.

O grupo docker muitas vezes dá um acesso muito amplo ao daemon do Docker. O Podman rootless evita esse hábito para contêineres iniciados a partir da sua conta. Para comparar a instalação de um motor Docker com essa escolha de direitos, você pode também reler nosso guia sobre Docker no Debian.

A documentação oficial do Podman detalha o funcionamento rootless, e o manual do podman run lista as opções de rede, volumes e identificadores. Comece com uma imagem simples, uma porta local e um volume somente leitura. Você saberá rapidamente se o Podman atende ao seu uso antes de mover um serviço útil.

sudo apt update && sudo apt upgrade