Entendendo os Volumes Docker
Os contêineres Docker são efêmeros por design. Quando um contêiner é parado e removido, todos os dados escritos dentro do sistema de arquivos do contêiner são perdidos. A maioria das aplicações do mundo real precisa de dados persistentes: bancos de dados, arquivos enviados, configuração, logs.
O Docker fornece três mecanismos para persistência de dados:
- Volumes Nomeados: Gerenciados pelo Docker, armazenados em
/var/lib/docker/volumes/. - Bind Mounts: Mapeiam um diretório específico do host para o contêiner.
- Montagens tmpfs: Armazenamento em memória descartado quando o contêiner para.
Pré-requisitos
- Docker Engine 20.10+ instalado.
- Acesso shell ao host Docker.
- Familiaridade básica com comandos CLI do Docker.
Problemas Comuns de Volumes Docker
1. Perda de Dados ao Reiniciar o Contêiner
docker volume create myapp-data
docker run -d \
--name postgres-db \
-v myapp-data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=secret \
postgres:16
Crítico: Se usar
docker-compose down -v, a flag-vexcluirá todos os volumes.
2. Erros de Permissão Negada
docker exec mycontainer id
ls -lan /caminho/para/diretorio/host
docker exec mycontainer ls -lan /data
Soluções:
# Use um volume nomeado
docker run -d -v myvolume:/data myimage
# Corresponda o UID
docker run -d --user "$(id -u):$(id -g)" -v ./data:/data myimage
3. Bind Mount Mostra Diretório Vazio
Bind mounts sobrescrevem o sistema de arquivos do contêiner. Use volumes nomeados que preservam o conteúdo da imagem.
4. Volumes Órfãos Consumindo Espaço em Disco
docker volume ls -f dangling=true
docker system df
docker volume prune
5. Dados Não Sincronizam no macOS/Windows
- Use VirtioFS (Docker Desktop 4.15+).
- Use volumes nomeados para conjuntos de dados grandes.
Prevenção e Melhores Práticas
- Sempre use volumes nomeados para bancos de dados e serviços com estado.
- Nunca use
docker-compose down -vem produção. - Faça backup de volumes regularmente.
- Configure montagens somente leitura com sufixo
:ro. - Monitore uso de disco com
docker system df.
Resumo
- Contêineres Docker são efêmeros — sempre use volumes para dados persistentes.
- Erros de permissão surgem de incompatibilidades de UID.
- Volumes nomeados são preferidos sobre bind mounts em produção.
- Limpe volumes órfãos com
docker volume prune.