J'utilise une variante de la réponse fournie à cette question: How to deal with persistent storage (e.g. databases) in docker. En particulier, je rencontre des problèmes avec la procédure de sauvegarde/restauration. Voici l'histoire ...Impossible de sauvegarder le conteneur de stockage persistant pour le conteneur docker MariaDB
J'ai créé une image simple à utiliser comme un conteneur. Le Dockerfile ressemble à ceci:
FROM busybox
VOLUME /var/lib/mysql
CMD /bin/sh
J'ai créé un conteneur à partir de cette image avec les commandes suivantes:
docker build -t myimages/datastore .
docker run --name mysql_data myimages/datastore true
Alors je construit l'image tutum/mariadb et créé un conteneur:
docker run -d -p 3306:3306 --volumes-from mysql_data tutum/mariadb
Tout fonctionne bien. Je peux me connecter à la base de données en utilisant le client mysql
et effectuer des opérations de base de données. Spécifiquement, j'ai fait ceci: create database testdb;
et create table testtbl select 1 as 'id', 'hello' as 'word';
.
Ensuite, j'ai tenté de sauvegarder mon conteneur. À la suite de la réponse à la question ci-dessus (avec quelques modifications), je l'ai fait:
docker run --rm --volumes-from mysql_data -v $(pwd):/backup busybox \
tar cvf /backup/backup.tar /var/lib/mysql
Et le tour est joué ! J'avais un fichier backup.tar
dans mon dossier de sauvegarde sur l'hôte.
Donc, comme une dernière étape, j'ai essayé de restaurer la sauvegarde avec la série de commandes suivantes:
docker run --name mysql_data2 myimages/datastore true
docker run --rm --volumes-from mysql_data2 -v $(pwd):/backup busybox \
tar xvf /backup/backup.tar -C /var/lib/mysql/
Et j'ai créé un nouveau conteneur MariaDB qui a importé des volumes du nouveau conteneur de données:
docker run -d -p 3308:3306 --volumes-from mysql_data2 tutum/mariadb
Le nouveau conteneur de base de données a démarré très bien, je me suis connecté avec le client mysql
et j'ai vérifié la base de données. Voici où le problème est survenu: au lieu d'avoir une base de données testdb
(comme créé ci-dessus), j'ai une base de données var
; et au lieu d'avoir une table testtbl
dans la nouvelle base de données, il n'y a pas de tables.
Quelqu'un peut-il voir ce que je fais mal? Merci!