Tous les services opérationnels Devise EUR Aucun frais de mise en service Vous êtes à La Réunion ?
‹ Serveurs VPS et Docker

Sauvegarde Docker : conteneurs et volumes

Sauvegarder une application Docker, ce n'est pas copier le conteneur : il se recrée à partir de son image. Ce qu'il faut garder, ce sont le fichier compose et ses réglages, les volumes ou dossiers qui portent les données, et un export de la base de données fait par son propre outil. On planifie ensuite cette copie chaque nuit, et on en garde un exemplaire hors du serveur, sans quoi une panne de disque emporte l'original et la sauvegarde ensemble.

Par Jonathan Dewaele · publié le

Les commandes suivent la page des volumes de Docker, les images officielles de MySQL et de MariaDB et la documentation de pg_dump, relues le 14 octobre 2026.

Ce qu'il faut sauvegarder

ÉlémentOù le trouverComment le copier
Fichier compose et fichier .envle dossier du projetcopie de fichiers
Dossiers montés (./donnees)le dossier du projetcopie de fichiers
Volumes nommésdocker volume lsarchive par un conteneur temporaire
Base de donnéesle service db ou baseexport par l'outil de la base

Le fichier .env contient souvent des mots de passe : il fait partie de la sauvegarde, et c'est une raison de la ranger en lieu sûr.

Exporter la base de données

Copier les fichiers d'une base en marche donne une copie incohérente, que le moteur peut refuser à la restauration. L'export par l'outil de la base, lui, est toujours lisible. Depuis le dossier du projet :

  1. Pour PostgreSQL : docker compose exec -T base pg_dump -U utilisateur nom_de_la_base > base.sql
  2. Pour l'image mysql, d'après sa page officielle, avec --single-transaction pour une copie cohérente des tables InnoDB sans arrêt : docker compose exec -T db sh -c 'exec mysqldump --single-transaction --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > base.sql
  3. Pour l'image mariadb, dont les versions 11 et suivantes n'ont plus les commandes mysql* : docker compose exec -T db sh -c 'exec mariadb-dump --single-transaction --all-databases -uroot -p"$MARIADB_ROOT_PASSWORD"' > base.sql
  4. Vérifiez que le fichier n'est pas vide : ls -lh base.sql et head base.sql.

L'option -T désactive le terminal interactif, ce qui permet de rediriger la sortie vers un fichier. Remplacez les noms de service, d'utilisateur et de base par ceux de votre fichier compose. La variable du mot de passe administrateur (MYSQL_ROOT_PASSWORD ou MARIADB_ROOT_PASSWORD) doit exister dans le conteneur ; si votre fichier tire ce mot de passe au hasard, exportez avec l'utilisateur de l'application.

Archiver un volume nommé

La documentation de Docker sauvegarde un volume en lançant un conteneur jetable qui le monte et en fait une archive :

  1. Arrêtez l'application pour figer les fichiers : docker compose stop
  2. Archivez le volume : docker run --rm -v monapp_donnees:/donnees -v "$(pwd)":/sauvegarde alpine:3 tar czf /sauvegarde/donnees.tar.gz -C /donnees .
  3. Relancez l'application : docker compose start

Le nom du volume est celui que donne docker volume ls, préfixé par le nom du projet ; alpine:3 est une petite image officielle qui ne sert qu'à lancer tar. Pour restaurer, on crée le volume puis on décompresse l'archive dedans par la même méthode, avec tar xzf. Le rôle des volumes et le piège de docker compose down -v sont expliqués dans Volumes Docker : garder ses données.

Planifier la copie

Réunissez les commandes dans un script, par exemple ~/sauvegarde.sh, qui exporte la base, archive les volumes et date les fichiers, puis lancez-le chaque nuit par cron :

30 2 * * * /home/admin/sauvegarde.sh >> /home/admin/sauvegarde.log 2>&1

La syntaxe et les pièges de cron sont détaillés dans Planifier une tâche avec cron. Prévoyez dans le script la suppression des archives trop anciennes, sans quoi elles finissent par remplir le disque.

Garder une copie ailleurs

Une sauvegarde rangée sur le même serveur ne protège ni d'une erreur de réinstallation ni d'une panne de disque. Rapatriez les archives sur une autre machine, par exemple depuis votre ordinateur avec scp ou rsync par SSH : rsync -av admin@adresse-du-serveur:/home/admin/sauvegardes/ ./sauvegardes/.

Tester la restauration

Une sauvegarde jamais restaurée reste une hypothèse. Une fois par trimestre, restaurez sur une copie, un second dossier de projet ou un petit serveur de test, et vérifiez que l'application démarre avec ses données.

Sur un VPS Hubspace

Le disque principal du serveur est sauvegardé chaque jour, et les sept dernières sauvegardes sont gardées ; l'onglet « Backups » de l'espace client permet d'en lancer une ou de remettre le serveur dans l'état d'une date donnée. Voir Les sauvegardes de votre VPS.

Cette sauvegarde ne remplace pas la vôtre pour deux raisons. Elle restaure tout le serveur d'un bloc, alors qu'un export permet de récupérer une seule application. Elle ne couvre pas le disque supplémentaire monté sur /mnt/data : des données qui y vivent doivent être copiées par vous. Docker et Compose sont installés à la livraison et le compte admin les utilise sans sudo, cron compris.

Questions fréquentes

Faut-il sauvegarder les images Docker ?

Non, sauf une image que vous avez construite et qui n'existe nulle part ailleurs. Les images publiques se retéléchargent ; notez plutôt leur étiquette exacte dans le fichier compose, pour retrouver la même version.

Peut-on sauvegarder sans arrêter l'application ?

L'export de la base, oui : pg_dump produit une copie cohérente sans arrêt, mysqldump et mariadb-dump aussi avec l'option --single-transaction, pour des tables InnoDB. L'archive d'un volume de fichiers, elle, est plus sûre application arrêtée, quelques secondes suffisent pour un petit volume.

Comment restaurer une base exportée ?

Pour PostgreSQL : docker compose exec -T base psql -U utilisateur nom_de_la_base < base.sql. Pour MySQL, la page de l'image donne docker compose exec -T db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < base.sql ; pour MariaDB, remplacez mysql par mariadb et la variable par MARIADB_ROOT_PASSWORD. Restaurez de préférence dans une base vide.

Articles liés