De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Administrando contêineres com Podman na prática

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 10 de agosto de 2026

No primeiro artigo desta série conhecemos os conceitos de imagem, registro e contêiner. Também instalamos o Podman e executamos comandos dentro de um ambiente Alpine Linux.

Agora avançaremos para uma aplicação que permanece ativa: um servidor web Nginx. Aprenderemos a publicar uma porta, listar contêineres, consultar registros, executar comandos, interromper serviços e administrar imagens.

Executando um servidor web

Execute:

$ podman run -d \
    --name meu-servidor \
    -p 127.0.0.1:8080:80 \
    docker.io/library/nginx:alpine

Esse comando cria um contêiner baseado na imagem do Nginx e o mantém em execução em segundo plano.

As opções utilizadas são:

Opção Função
-d Executa o contêiner em segundo plano
--name meu-servidor Atribui um nome ao contêiner
-p 127.0.0.1:8080:80 Encaminha uma porta do computador para o contêiner

O Nginx escuta a porta 80 dentro do contêiner. Como utilizamos 127.0.0.1:8080:80 a porta 8080 do computador foi associada à porta 80 do contêiner.

O endereço 127.0.0.1 limita o acesso ao próprio computador, uma escolha apropriada para testes locais. Se tivéssemos usado apenas 8080:80, dependendo da configuração, o serviço poderia ficar acessível por outras máquinas da rede.

Abra o navegador e acesse:

http://localhost:8080

Também podemos fazer o teste pelo terminal:

$ curl http://localhost:8080

A página de boas-vindas do Nginx deverá ser apresentada.

Listando os contêineres

Para mostrar os contêineres em execução:

$ podman ps

A saída apresenta informações como identificador, imagem, comando, horário de criação, estado, portas e nome.

Para incluir contêineres que já terminaram:

$ podman ps --all

A forma abreviada é:

$ podman ps -a

Cada contêiner recebe um identificador longo. Na maioria dos comandos, podemos usar seu nome ou os primeiros caracteres do identificador.

Como atribuímos o nome meu-servidor, podemos trabalhar diretamente com ele.

Consultando os registros

A saída produzida pela aplicação pode ser consultada com:

$ podman logs meu-servidor

Depois de acessar a página do Nginx, o registro deverá mostrar a requisição recebida.

Para acompanhar novas mensagens em tempo real:

$ podman logs --follow meu-servidor

A opção pode ser abreviada:

$ podman logs -f meu-servidor

Pressione Ctrl+C para interromper o acompanhamento. O contêiner continuará funcionando.

Os registros são um dos primeiros recursos que devemos consultar quando uma aplicação não inicia ou apresenta algum comportamento inesperado.

Examinando o contêiner

O comando inspect apresenta os detalhes técnicos de uma imagem, contêiner, volume ou rede:

$ podman inspect meu-servidor

A saída é fornecida em formato JSON e pode ser extensa. Ela inclui configurações, volumes, variáveis de ambiente, portas e informações de rede.

Para mostrar apenas o estado:

$ podman inspect \
    --format '{{.State.Status}}' \
    meu-servidor

Para mostrar o identificador da imagem:

$ podman inspect \
    --format '{{.Image}}' \
    meu-servidor

Também podemos examinar os processos executados dentro do contêiner:

$ podman top meu-servidor

Executando comandos dentro do contêiner

O comando podman exec inicia um novo processo dentro de um contêiner que já está funcionando.

Para abrir um shell no servidor:

$ podman exec -it meu-servidor /bin/sh

Dentro do contêiner, podemos examinar os arquivos disponibilizados pelo Nginx:

$ ls /usr/share/nginx/html

Podemos verificar os processos com o comando ps.

Para sair digite exit.

O comando exit encerra apenas o shell iniciado com podman exec. O processo principal do Nginx continua em execução.

Também podemos executar um comando sem abrir uma sessão interativa:

$ podman exec meu-servidor nginx -v

Parando e iniciando o contêiner

Para interromper o servidor:

$ podman stop meu-servidor

Confirme seu estado:

$ podman ps -a

O contêiner ainda existe, embora esteja parado. Podemos iniciá-lo novamente:

$ podman start meu-servidor

Para reiniciá-lo:

$ podman restart meu-servidor

Essa distinção é importante. Parar um contêiner encerra seus processos. Removê-lo apaga a instância criada a partir da imagem.

Por que alguns contêineres terminam imediatamente?

Um contêiner permanece ativo enquanto seu processo principal está sendo executado. Se esse processo terminar, o contêiner também termina.

Podemos demonstrar esse comportamento:

$ podman run --name teste \
    docker.io/library/alpine:latest \
    echo "Tarefa concluída"

O comando echo termina imediatamente. Por isso, o contêiner aparece como encerrado:

$ podman ps -a

Para descobrir o que ocorreu em um contêiner encerrado, consulte:

$ podman logs teste

Depois, remova-o:

$ podman rm teste

Removendo o servidor

Primeiro, interrompa o contêiner:

$ podman stop meu-servidor

Depois, remova-o:

$ podman rm meu-servidor

Também é possível interromper e remover em uma única operação:

$ podman rm --force meu-servidor

A imagem do Nginx continuará armazenada. Ela poderá ser usada posteriormente para criar outro contêiner.

Administrando imagens

Para listar as imagens disponíveis localmente:

$ podman images

Podemos baixar uma imagem sem criar um contêiner:

$ podman pull docker.io/library/debian:stable

Para examinar seus detalhes:

$ podman inspect docker.io/library/debian:stable

Para remover uma imagem que não está sendo utilizada:

$ podman rmi docker.io/library/debian:stable

Se houver algum contêiner baseado nela, mesmo que esteja parado, o Podman poderá impedir a remoção. Nesse caso, examine os contêineres existentes:

$ podman ps -a

Problemas frequentes

O nome curto da imagem não é aceito

Em vez de:

$ podman run alpine

use:

$ podman run docker.io/library/alpine:latest

Essa forma elimina ambiguidades e identifica a origem da imagem.

A porta já está ocupada

Se a porta 8080 estiver em uso, escolha outra:

$ podman run -d \
    --name meu-servidor \
    -p 127.0.0.1:8081:80 \
    docker.io/library/nginx:alpine

Depois, acesse:

http://localhost:8081

Para verificar as portas TCP em uso:

$ ss -ltnp

O nome do contêiner já existe

Os nomes devem ser únicos dentro do ambiente do usuário. Verifique os contêineres:

$ podman ps -a

Remova a instância antiga:

$ podman rm meu-servidor

Ou escolha outro nome:

$ podman run --name segundo-servidor ...

A página não está disponível

Confirme se o contêiner está ativo:

$ podman ps

Consulte os registros:

$ podman logs meu-servidor

Verifique o mapeamento das portas:

$ podman port meu-servidor

Neste segundo artigo, aprendemos a administrar o ciclo de vida de um contêiner, consultar registros, executar comandos, publicar portas e gerenciar imagens.

No terceiro artigo, veremos como preservar os dados, compartilhar diretórios com o contêiner e trabalhar com maior segurança no modo rootless.



Veja a relação completa dos artigos de Rubens Queiroz de Almeida