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ément | Où le trouver | Comment le copier |
|---|---|---|
Fichier compose et fichier .env | le dossier du projet | copie de fichiers |
Dossiers montés (./donnees) | le dossier du projet | copie de fichiers |
| Volumes nommés | docker volume ls | archive par un conteneur temporaire |
| Base de données | le service db ou base | export 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 :
- Pour PostgreSQL :
docker compose exec -T base pg_dump -U utilisateur nom_de_la_base > base.sql - Pour l'image
mysql, d'après sa page officielle, avec--single-transactionpour 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 - Pour l'image
mariadb, dont les versions 11 et suivantes n'ont plus les commandesmysql*:docker compose exec -T db sh -c 'exec mariadb-dump --single-transaction --all-databases -uroot -p"$MARIADB_ROOT_PASSWORD"' > base.sql - Vérifiez que le fichier n'est pas vide :
ls -lh base.sqlethead 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 :
- Arrêtez l'application pour figer les fichiers :
docker compose stop - Archivez le volume :
docker run --rm -v monapp_donnees:/donnees -v "$(pwd)":/sauvegarde alpine:3 tar czf /sauvegarde/donnees.tar.gz -C /donnees . - 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
- Installer Docker sur Ubuntu ou Debian, pas à pasInstaller Docker Engine et Docker Compose sur Ubuntu 24.04, 26.04 ou Debian 13 depuis le dépôt officiel, l'utiliser sans sudo et vérifier que tout fonctionne.
- Docker Compose : décrire et lancer vos conteneursDocker Compose expliqué : écrire un fichier compose.yaml, lancer et arrêter vos services, lire les journaux et mettre à jour une application sur un serveur.
- Commandes Docker : les essentielles à connaîtreLes commandes Docker essentielles : lister les conteneurs, lire leurs journaux, entrer dans un conteneur, gérer les images et libérer de la place sans risque.