web-dev-qa-db-fra.com

Comment ouvrir un conteneur LXD existant?

J'ai installé Ubuntu 16.04, xfce desktop pour ce que cela vaut. J'ai installé LXD, avec mes images et conteneurs sur mon deuxième grand disque, avec des liens symboliques vers lesdites images et conteneurs configurés dans /var/lib/lxd/. Tout fonctionne comme prévu.

J'ai maintenant réinstallé Ubuntu 16.04 sur un nouveau lecteur, Mate Desktop, à sa juste valeur. J'ai installé LXD et créé les liens symboliques (dans /var/lib/lxd) avec mes dossiers d'images et de conteneurs sur mon grand disque.

Ni mes images ni mes conteneurs ne sont listés lors de l’utilisation de la liste lxc (ne peuvent donc pas les démarrer et les utiliser).

Des indications sur ce que je dois faire pour que mon LXD nouvellement installé puisse utiliser mes images et mes conteneurs préexistants?

5
hatterman

Pour quiconque intéressé, la pièce manquante du puzzle était que je devais réutiliser la base de données existante lxd, lxd.db.

Ainsi, la procédure à suivre pour utiliser mes conteneurs LXD préexistants lors d’une nouvelle installation est la suivante: -

Installer LXD

Sudo apt-get install lxd

Supprimer les répertoires containers et images

Sudo rm -rf /var/lib/lxd/containers
Sudo rm -rf /var/lib/lxd/images

Créez des liens symboliques vers mes répertoires containers et images préexistants.

Sudo ln -s /media/sda10/lxd/containers /var/lib/lxd/containers
Sudo ln -s /media/sda10/lxd/images /var/lib/lxd/images

Monter ma partition d'installation d'origine et copier le fichier lxd.db de mon installation d'origine sur ma nouvelle installation

Sudo cp /mnt/var/lib/lxd/lxd.db /var/lib/lxd/lxd.db

Mes conteneurs apparaissent maintenant lorsque je les énumère et que je cours comme prévu.

NOTE: J'ai plusieurs installations sur plusieurs partitions, et je saute entre les nouvelles versions d'Ubuntu au fur et à mesure de leur disponibilité, et n'efface pas une version antérieure tant que je ne suis pas content. C'est vraiment facile à faire et est devenu une seconde nature.

Je sais que ce n'est pas une pratique courante, mais cela m'a (encore une fois) sauvé mon bacon à cette occasion. Pour ceux qui ne le font pas, il serait conseillé de faire une sauvegarde du fichier lxd.db.

EDIT: Pour en savoir plus, consultez https://insights.ubuntu.com/2016/04/13/lxd-2-0-remote-hosts-and-container-migration-612/ indique qu'il s'agit Il est également très facile d’utiliser un hôte LXD distant et de déplacer simplement les conatiners entre les hôtes.

Ce n'est pas la solution pour moi, dans ce cas particulier, mais c'est une très bonne lecture qui montre un moyen très facile de migrer des conteneurs.

2
hatterman

Comme mes commentaires contiennent des fautes de frappe, je vais récapituler quelques suggestions pour importer un conteneur existant (dont le stockage est disponible) dans une nouvelle base de données.

Premièrement, il existe (sans aucun doute) des alternatives plus faciles si l’on veut copier une instance entière de LXD (en prenant essentiellement le stockage de tous les conteneurs, plus le DB de /var/lib/lxd). En outre, si l'ancienne instance est toujours en cours d'exécution et accessible par le réseau, une approche plus native consiste à la définir comme une instance distante, comme décrit dans le chapitre Migration de conteneurs et d'hôtes de la merveilleuse Ubuntu Insights LXD 2.0: Série d'articles sur le blog .


Maintenant, une approche décrite dans n autre chapitre de cette série (à nouveau, uniquement possible si l'ancienne instance est toujours en cours d'exécution) consiste à créer une image d'un conteneur existant à l'aide de

lxc publish <my-container>@<snapshot> <my-image-name>

puis exportez-le en tarball avec

lxc image export <my-image-name> /path/to/directory

Les archives résultantes peuvent être importées avec

lxc image import <metadata-tarball> <rootfs-tarball> --alias <my-image-name>

Comme OP l'a dit dans ses commentaires, c'est beaucoup de travail. Ce qui est plus grave, c'est que cela échoue si, pour une raison quelconque, vous ne pouvez pas exécuter l'ancienne instance.

À partir de la version 2.7, LXD stocke un fichier backup.yaml dans la mémoire de chaque conteneur (sous /var/lib/lxd/containers/<my-container>), qui permet d'importer un conteneur à partir d'une copie, à l'aide de lxd import (voir Stratégies de sauvegarde LXD et ceci numéro de GitHub ). Notez le lxd; c'est différent de lxc image import.

Sur la base de la page LXD News Je suppose que l’on le fait simplement en déplaçant la mémoire d’un conteneur dans le répertoire /var/lib/lxd/containers et en exécutant

lxd import <my-container>

Cependant, comme les référentiels officiels Xenial proposent actuellement la version 2.0.9 de LXD, je n’ai pas testé cette dernière partie.

0
Jonathan Y.