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.

Podman: Volumes, persistência e segurança

Colaboração: Rubens Queiroz de Almeida

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

Nos artigos anteriores, criamos containeres e executamos um servidor web Nginx. Entretanto, ainda existe uma questão fundamental: o que acontece com os dados quando um container é removido?

Arquivos gravados na camada interna do container pertencem àquela instância. Se ela for apagada, os dados normalmente serão perdidos. Para preservar documentos, configurações, páginas e bancos de dados, o Podman oferece volumes e compartilhamento de diretórios.

Neste artigo criaremos um site persistente, trabalharemos com volumes administrados pelo Podman e conheceremos os principais cuidados de segurança e manutenção.

Criando um site persistente

Vamos armazenar uma página no computador e disponibilizá-la dentro de um container Nginx.

Crie o diretório do laboratório:

$ mkdir -p ~/laboratorio-podman/site
$ cd ~/laboratorio-podman

Abra o arquivo em um editor e insira o texto a seguir:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Meu site com Podman</title>
</head>
<body>
    <h1>Meu site está sendo executado em um container</h1>
    <p>Esta página está armazenada no computador hospedeiro.</p>
</body>
</html>

Salve o arquivo e execute:

$ podman run -d \
    --name meu-site \
    -p 127.0.0.1:8080:80 \
    -v "$PWD/site:/usr/share/nginx/html:ro" \
    docker.io/library/nginx:alpine

A opção -v criou a seguinte associação:

diretório no computador:diretório no container:opções 

No exemplo:

 $PWD/site:/usr/share/nginx/html:ro 

$PWD/site representa o diretório existente no computador. /usr/share/nginx/html é o local onde o Nginx procura suas páginas dentro do container. A opção ro disponibiliza o conteúdo somente para leitura.

Acesse:

http://localhost:8080

A página exibida vem do diretório site. Se o container for removido, o arquivo continuará armazenado no computador.

Faça o teste:

$ podman rm --force meu-site

Confirme que o arquivo permanece disponível:

$ ls -l ~/laboratorio-podman/site

Crie novamente o container com o mesmo comando e o conteúdo voltará a ser apresentado.

Diretórios compartilhados e SELinux

Em distribuições que utilizam SELinux, como Fedora e Red Hat Enterprise Linux, poderá ser necessário aplicar um rótulo apropriado ao diretório:

$ podman run -d \
    --name meu-site \
    -p 127.0.0.1:8080:80 \
    -v "$PWD/site:/usr/share/nginx/html:ro,Z" \
    docker.io/library/nginx:alpine

A opção Z solicita ao Podman que ajuste o rótulo SELinux para uso privado por esse container.

Quando o mesmo diretório precisa ser compartilhado por vários containeres, pode-se utilizar z minúsculo:

-v "$PWD/site:/usr/share/nginx/html:ro,z"

A diferença pode ser resumida assim:

Opção Utilização
Z Diretório usado por um único container
z Diretório compartilhado por vários containeres
ro Conteúdo disponível somente para leitura
rw Conteúdo disponível para leitura e gravação

As opções z e Z modificam os rótulos SELinux dos arquivos. Por isso, devem ser usadas com cuidado em diretórios que já pertencem a outros serviços do sistema.

Volumes administrados pelo Podman

Também podemos criar um volume sem indicar diretamente um diretório do computador:

$ podman volume create dados-aplicacao

Liste os volumes:

$ podman volume ls

Use o volume em um container:

$ podman run --rm \
    -v dados-aplicacao:/dados \
    docker.io/library/alpine:latest \
    sh -c 'date > /dados/ultima-execucao.txt'

O container cria um arquivo dentro do volume e é removido ao terminar.

Agora crie outro container e leia o arquivo:

$ podman run --rm \
    -v dados-aplicacao:/dados:ro \
    docker.io/library/alpine:latest \
    cat /dados/ultima-execucao.txt

O primeiro container deixou de existir, porém o arquivo permaneceu no volume.

Para examinar os detalhes:

$ podman volume inspect dados-aplicacao

Quando o volume não for mais necessário:

$ podman volume rm dados-aplicacao

O Podman impedirá a remoção se o volume ainda estiver ligado a algum container.

Diretório compartilhado ou volume?

Um diretório compartilhado é conveniente quando queremos acessar diretamente os arquivos pelo computador hospedeiro. É uma boa escolha para código-fonte, documentos, páginas de um site e configurações que precisam ser editadas.

Um volume administrado pelo Podman é apropriado quando a aplicação deve controlar seu próprio armazenamento. Bancos de dados e serviços que gravam muitos arquivos costumam utilizar esse modelo.

Diretório compartilhado Volume do Podman
Caminho escolhido pelo usuário Localização administrada pelo Podman
Fácil acesso pelo hospedeiro Mais integrado ao ciclo de vida dos containeres
Útil para código e configurações Útil para dados de aplicações
Permissões precisam ser observadas Podman administra parte da estrutura

Container e imagem não são backups

Uma imagem pode ser baixada novamente do registro, mas os dados criados durante a execução precisam ser preservados separadamente.

Um banco de dados dentro de um container deve armazenar suas informações em um volume. Esse volume também precisa fazer parte da política de backup.

Antes de remover um container importante, examine sua configuração:

$ podman inspect nome-do-container

Também podemos verificar os volumes existentes:

$ podman volume ls

A capacidade de recriar o container resolve apenas a aplicação. Os dados continuam exigindo cópias de segurança.

O que significa executar sem root?

Na maioria das instalações modernas, o Podman pode ser usado diretamente:

$ podman ps

Nesse caso, o container é executado no contexto do usuário atual. Internamente, o Podman utiliza namespaces para mapear identificadores de usuários e grupos.

Um processo que aparece como root dentro do container não recebe automaticamente os mesmos poderes do usuário root no computador hospedeiro.

As imagens e os containeres do usuário são armazenados, por padrão, abaixo de ~/.local/share/containers/.

Cada usuário possui seu próprio conjunto. Por isso, os resultados destes dois comandos podem ser diferentes:

$ podman ps -a
$ sudo podman ps -a

O primeiro mostra os containeres do usuário atual. O segundo consulta aqueles pertencentes ao contexto administrativo.

O modo rootless reduz os privilégios concedidos aos processos. Ele acrescenta uma camada importante de proteção, embora ainda seja necessário selecionar cuidadosamente as imagens executadas.

Cuidados básicos de segurança

Containeres oferecem isolamento, mas continuam executando programas no computador. Algumas precauções são recomendadas:

  • obtenha imagens de fontes conhecidas;
  • informe o nome completo do registro;
  • prefira executar containeres como usuário comum;
  • evite montar diretórios sensíveis do hospedeiro;
  • não compartilhe /, /etc ou todo o diretório pessoal;
  • publique somente as portas necessárias;
  • limite serviços de teste ao endereço 127.0.0.1;
  • preserve dados importantes em volumes;
  • inclua os volumes na política de backup;
  • mantenha as imagens atualizadas;
  • evite conceder privilégios adicionais sem necessidade.

Em ambientes importantes, é recomendável escolher versões específicas. A etiqueta latest pode apontar para conteúdos diferentes ao longo do tempo.

Em vez de depender sempre de nginx:latest pode ser mais adequado utilizar uma versão previamente testada.

Problemas de permissões

Quando um diretório compartilhado apresenta a mensagem Permission denied, verifique inicialmente suas permissões:

$ ls -ld caminho-do-diretorio

Examine também os arquivos internos:

$ ls -l caminho-do-diretorio

Em sistemas com SELinux, consulte o contexto:

$ ls -Zd caminho-do-diretorio

Dependendo da utilização, as opções :z ou :Z podem ser necessárias.

Outra causa frequente está nos identificadores de usuários. O processo dentro do container pode utilizar um UID diferente daquele do proprietário do diretório no hospedeiro. Antes de alterar permissões amplamente, examine qual usuário está executando o processo:

$ podman top nome-do-container user huser group hgroup

Comandos essenciais

Objetivo Comando
Listar containeres ativos podman ps
Listar todos os containeres podman ps -a
Consultar registros podman logs CONTAINER
Executar um comando podman exec CONTAINER COMANDO
Examinar detalhes podman inspect CONTAINER
Parar um container podman stop CONTAINER
Iniciar um container podman start CONTAINER
Remover um container podman rm CONTAINER
Listar imagens podman images
Remover uma imagem podman rmi IMAGEM
Criar um volume podman volume create VOLUME
Listar volumes podman volume ls
Examinar um volume podman volume inspect VOLUME
Remover um volume podman volume rm VOLUME

Limpando o laboratório

Antes de apagar qualquer recurso, verifique o que existe:

$ podman ps -a
$ podman images
$ podman volume ls

Interrompa e remova o container criado:

$ podman rm --force meu-site

Remova o volume de teste, caso ainda exista:

$ podman volume rm dados-aplicacao

Se quiser remover as imagens:

$ podman rmi docker.io/library/nginx:alpine
$ podman rmi docker.io/library/alpine:latest

O diretório ~/laboratorio-podman contém a página criada pelo usuário e não será removido pelo Podman.

Existem comandos capazes de excluir em conjunto recursos não utilizados, como:

$ podman system prune

Antes de utilizá-los, consulte exatamente o que poderá ser removido:

$ podman system prune --help

Durante o aprendizado, remover containeres, imagens e volumes individualmente oferece maior controle e ajuda a compreender a função de cada recurso.

Conclusão da série

Ao longo destes três artigos, aprendemos que uma imagem é o modelo usado para criar containeres e que cada container executa uma aplicação em um ambiente isolado. Também vimos como publicar portas, consultar registros, entrar em containeres ativos e administrar seu ciclo de vida.

Neste último artigo, acrescentamos um componente fundamental: a persistência. Os containeres podem ser recriados com facilidade, enquanto os dados importantes devem permanecer em volumes ou diretórios externos e fazer parte de uma política de backup.

Com esses conhecimentos, já temos uma base para avançar para recursos mais sofisticados do Podman, como criação de imagens com Containerfile, comunicação entre containeres, pods, limites de recursos e gerenciamento de serviços com systemd e Quadlet.



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