Ce guide documente la procédure standard pour transférer des données existantes d’un bind mount (dossier hôte local, ex: ./postgres14) vers un volume nommé géré par Docker (ex: mastodon_postgres_data). Cette méthode garantit la persistance, la sécurité, et la portabilité.
Avant de commencer, modifiez votre fichier docker-compose.yml en deux endroits pour déclarer et utiliser le volume nommé.
Remplacez le chemin local par le nom du volume dans la section volumes: du service concerné.
| Ancien bind mount | Nouveau volume nommé |
|---|---|
volumes: - ./postgres14:/var/lib/postgresql/data |
volumes: - mastodon_postgres_data:/var/lib/postgresql/data |
Ajoutez la section volumes: à la fin du fichier Compose :
# ... après la section networks:
volumes:
mastodon_postgres_data:
Arrêtez tous les conteneurs pour libérer l’accès aux dossiers de données sources.
docker compose down
Utilisez un conteneur temporaire basé sur l’image légère alpine pour monter l’ancien dossier et le nouveau volume, puis copier les données. Le drapeau -a (archive) est essentiel pour conserver les permissions des fichiers (UID/GID), ce qui est vital pour les bases de données.
Exécutez la commande suivante depuis le répertoire contenant votre docker-compose.yml :
# Migration des données de PostgreSQL (du dossier local './postgres14' vers le volume nommé)
docker run --rm \
-v "$(pwd)/postgres14":/from \
-v mastodon_postgres_data:/to \
alpine \
sh -c "cp -a /from/. /to/"
Une fois que la commande de copie est terminée, lancez votre stack. Elle utilisera désormais les volumes nommés qui contiennent vos données migrées.
docker compose up -d
Après avoir vérifié que l’application fonctionne parfaitement avec le volume nommé, vous pouvez supprimer l’ancien dossier de données bind mount.
# Suppression de l'ancien dossier bind mount
rm -rf ./postgres14