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.
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.
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.
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.
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.
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 |
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.
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.
Containeres oferecem isolamento, mas continuam executando programas no computador. Algumas precauções são recomendadas:
/, /etc ou todo o diretório pessoal;
127.0.0.1;
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.
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
| 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 |
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.
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.