Para fazer o backup de todos os volumes de uma vez só, a forma mais eficiente é usar um script curto no terminal. Como o Docker não possui um comando nativo docker volume backup --all, nós listamos os volumes e rodamos o comando de compactação em loop.
Aqui está o comando pronto para copiar e colar no seu terminal:
Bash
for volume in $(docker volume ls -q); do
echo "Fazendo backup do volume: $volume"
docker run --rm \
-v "$volume":/data \
-v "$(pwd)":/backup \
ubuntu tar czf /backup/"$volume"_backup.tar.gz -C /data .
done
O que este script faz?
docker volume ls -q: Lista apenas os nomes de todos os volumes existentes.for volume in ...: Cria um loop que processa um volume por vez.tar czf ...: Salva um arquivo.tar.gzindividual para cada volume na sua pasta atual do host, usando o próprio nome do volume para identificar o arquivo (ex:meu_volume_backup.tar.gz).
Como Restaurar Todos de uma Vez?
Se você tiver uma pasta cheia de arquivos .tar.gz criados por esse script e quiser restaurá-los (ou movê-los para outro servidor), use este loop:
Bash
for arquivo in *_backup.tar.gz; do
volume="${arquivo%_backup.tar.gz}"
echo "Restaurando volume: $volume"
docker volume create "$volume"
docker run --rm -v "$volume":/data -v "$(pwd)":/backup ubuntu bash -c "cd /data && tar xzf /backup/$arquivo"
done
?? Aviso: Lembre-se de parar os containers (
docker stop $(docker ps -a -q)) antes de rodar o backup para garantir que nenhum arquivo seja modificado durante a cópia.