Em um Mac usando o Docker Desktop, faça o backup de um volume nomeado do Compose montando-o em um contêiner temporário e gravando um arquivo tar em uma pasta no seu Mac. Verifique o nome do volume, pare os serviços que gravam nele, crie o arquivo compactado e confirme se o arquivo existe antes de remover os contêineres. Um docker compose down comum mantém os volumes nomeados; docker compose down --volumes remove os volumes elegíveis do projeto, portanto não o execute até que o backup esteja concluído.
1. Identifique o volume do Compose e seu caminho de montagem
No Terminal, acesse o diretório que contém o arquivo Compose do projeto. Localize a montagem do serviço, como db-data:/var/lib/postgresql/data, e sua respectiva declaração de nível superior sob volumes:. O lado esquerdo, db-data, é a chave do Compose; o caminho do contêiner após os dois-pontos é onde a aplicação enxerga os dados. O Compose pode criar o volume real do Docker com um prefixo de projeto, enquanto um name: configurado pode atribuir a ele um nome personalizado. A referência de volumes do Compose da Docker descreve essas regras de nomenclatura.
Liste os volumes usados pelo projeto Compose atual:
docker compose volumes
Use essa saída e o arquivo Compose para identificar o volume exato do Docker. Se o projeto usar múltiplos arquivos Compose, perfis ou um nome de projeto personalizado, use as mesmas opções ao inspecioná-lo que foram usadas quando a stack foi iniciada. Não tente adivinhar o nome real do volume apenas pela chave do YAML. O comando docker volume ls pode mostrar todos os volumes do Docker, mas pode incluir projetos não relacionados.
2. Interrompa as gravações antes de criar o arquivo compactado
Um arquivo compactado do sistema de arquivos não é necessariamente um backup de banco de dados consistente se o banco de dados estiver sofrendo alterações enquanto os arquivos são copiados. Primeiro, encerre a aplicação de forma limpa; para uma stack do Compose, docker compose stop para seus serviços, mantendo os contêineres e volumes. Se o banco de dados tiver um procedimento específico de dump ou backup da aplicação, use-o quando a consistência a nível de transação for importante; em seguida, crie também um arquivo do volume se precisar de uma cópia em nível de arquivo.
Evite docker compose down --volumes nesta etapa. A documentação do Compose informa que o down remove os contêineres e redes do projeto por padrão, enquanto --volumes também remove volumes nomeados e anônimos elegíveis. Volumes externos não são removidos pelo down. A referência do compose down da Docker explica a diferença.
3. Crie um backup tar em uma pasta do Mac
O exemplo a seguir pressupõe que o volume real do Docker se chama myproject_db-data. Substitua esse valor pelo nome exato que você identificou. Ele salva db-data-backup.tar no diretório atual do Mac. O Docker Desktop executa o Docker Engine dentro de uma VM Linux, portanto os dados de um volume nomeado são gerenciados pelo Docker; esse método os copia por meio de um contêiner temporário, em vez de depender de um caminho de armazenamento da VM Linux. O guia de volumes da Docker documenta a abordagem com contêiner auxiliar e tar, e a documentação de configurações do Docker Desktop para Mac descreve a VM Linux e o compartilhamento de arquivos com o host.
volume_name='myproject_db-data'
backup_dir="$PWD"
backup_file='db-data-backup.tar'
docker run --rm \
--mount "type=volume,source=$volume_name,target=/source,readonly" \
--mount "type=bind,source=$backup_dir,target=/backup" \
alpine sh -c 'tar -C /source -cf "/backup/'"$backup_file"'" .'
O arquivo compactado é gravado no diretório representado por $PWD, portanto escolha um local com espaço livre suficiente antes de executar o comando. O volume é montado como somente leitura no contêiner auxiliar para evitar alterações acidentais durante a cópia; isso por si só não impede que outros contêineres façam gravações, e é por isso que parar os processos de gravação com antecedência é importante. O comando requer que o Docker Desktop esteja em execução e que a pasta do Mac esteja acessível para montagens do tipo bind. Se a montagem falhar, verifique o acesso de compartilhamento de arquivos do Docker Desktop para essa pasta.
Verifique se o arquivo compactado existe e possui um tamanho plausível diferente de zero:
ls -lh "$backup_file"
Isso confirma que um arquivo foi criado, mas não que seu conteúdo forme um backup restaurável da aplicação. Mantenha o arquivo em algum local fora do volume gerenciado pelo Docker e considere copiá-lo para seu destino habitual de backup antes de excluir dados.
4. Remova os contêineres somente após verificar seu destino
Quando o arquivo compactado estiver no local correto, remova os contêineres do projeto com:
docker compose down
Isso mantém o volume nomeado intacto por padrão. Se a sua intenção for também excluir o volume, primeiro verifique novamente os nomes do projeto e do volume e, em seguida, use docker compose down --volumes apenas quando estiver pronto para remover esses dados. Um volume com nome personalizado ou externo pode ter um comportamento de ciclo de vida diferente; consulte a definição do Compose e a referência de comandos da Docker em vez de presumir que a opção afeta todos os volumes.
Considerações sobre restauração
O fluxo de trabalho de volumes documentado pela Docker restaura um arquivo tar montando o volume de destino e extraindo o arquivo para dentro dele. Para arquivos de banco de dados, restaure em um volume novo ou intencionalmente limpo enquanto o serviço do banco de dados estiver parado, e siga os requisitos de permissões e inicialização da imagem do banco de dados. Não faça a extração sobre um volume que contenha dados dos quais você ainda precisa: arquivos existentes podem entrar em conflito com o arquivo compactado, e uma extração de tar não é uma estratégia de mesclagem segura. Se você precisar de um ponto de recuperação consistente para o banco de dados, utilize o próprio processo de backup e restauração do banco de dados, além de, ou em vez de, um backup de arquivos brutos.
Fontes
docker compose down — Docker
Volumes — Docker
Change your Docker Desktop settings — Docker