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:

  1. Volumes Nomeados: Gerenciados pelo Docker, armazenados em /var/lib/docker/volumes/.
  2. Bind Mounts: Mapeiam um diretório específico do host para o contêiner.
  3. 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 -v excluirá 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 -v em 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.

Artigos Relacionados