Como abro um contêiner LXD existente?

5

Eu tenho o Ubuntu 16.04 instalado, o desktop xfce pelo que vale a pena. Tenho o LXD instalado, com minhas imagens e contêineres em meu segundo disco grande, com links simbólicos para as imagens e contêineres configurados em /var/lib/lxd/ . Tudo funciona como esperado.

Eu já re-instalei o Ubuntu 16.04 em uma nova unidade, o Mate Desktop, pelo que vale a pena. Eu instalei o LXD e criei os links simbólicos (em /var/lib/lxd ) para minhas pastas de imagens e contêineres na minha grande unidade.

Nem minhas imagens nem contêineres são listados ao usar a lista lxc (portanto, não é possível iniciá-los e usá-los).

Alguma indicação sobre o que preciso fazer para que meu LXD recém-instalado use minhas imagens e containers pré-existentes?

    
por hatterman 08.05.2017 / 15:41

2 respostas

3

Para qualquer pessoa interessada, a peça que faltava no quebra-cabeça era que eu tinha que reutilizar o banco de dados lxd existente, lxd.db .

Assim, as etapas para usar meus contêineres LXD pré-existentes em uma instalação nova são: -

Instale o LXD

sudo apt-get install lxd

Exclua os diretórios containers e images

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

Crie links simbólicos para meus diretórios containers e images pré-existentes.

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

Monte minha partição de instalação original e copie o arquivo lxd.db da minha instalação original para minha nova instalação

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

Meus contêineres aparecem agora quando eu os listar e executar conforme o esperado.

NOTA: Eu tenho várias instalações em múltiplas partições, e eu pulo sapo entre novas versões do Ubuntu assim que elas se tornam disponíveis, e não apago uma versão mais antiga até que eu esteja feliz. É muito fácil de fazer e acaba de se tornar uma segunda natureza.

Eu sei que não é uma prática comum, mas (novamente) salvou meu bacon nesta ocasião. Para aqueles que não fizerem isso, será necessário fazer um backup do arquivo lxd.db .

EDIT: Mais informações no link mostra que também é muito fácil usar um host LXD remoto e simplesmente mover os usuários entre hosts.

Esta não é a solução para mim, neste caso específico, mas é uma boa leitura, mostrando uma maneira muito fácil de migrar contêineres.

    
por hatterman 09.05.2017 / 11:12
0

Como meus comentários contêm alguns erros de digitação, vou recapitular algumas sugestões para importar um contêiner existente (cujo armazenamento está disponível) em um novo banco de dados.

Primeiro, existem (sem dúvida) alternativas mais fáceis se alguém quiser copiar uma instância inteira do LXD (basicamente pegando o armazenamento de todos os contêineres, mais o DB de /var/lib/lxd ). Além disso, se a instância antiga ainda estiver em execução e acessível por rede, uma abordagem mais nativa é defini-la como remota, conforme descrito no Migração de hosts remotos e container no maravilhoso Ubuntu Insights LXD 2.0: série de publicações no blog .

Agora, uma abordagem descrita em outro capítulo dessa série (novamente, somente viável se a instância antiga ainda estiver em execução) é fazer uma imagem de um contêiner existente usando

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

exporte-o para tarballs com

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

Os tarballs resultantes podem ser importados com

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

Como OP disse em comentários, é um pouco de trabalho. O que é mais sério é que ele falha se, por algum motivo, você não puder executar a instância antiga.

A partir da versão 2.7, o LXD armazena um arquivo backup.yaml no armazenamento de cada contêiner (em /var/lib/lxd/containers/<my-container> ) que permite importar um contêiner de uma cópia, usando lxd import (consulte Estratégias de backup do LXD e esta questão do GitHub ). Observe o lxd ; isso é diferente de lxc image import .

Com base na página LXD News , suponho que uma pessoa faça isso simplesmente movendo o armazenamento de um contêiner para o diretório /var/lib/lxd/containers , e executando

lxd import <my-container>

No entanto, como os repositórios oficiais do Xenial oferecem atualmente a versão 2.0.9 do LXD, não testei essa última parte.

    
por Jonathan Y. 09.05.2017 / 22:34

Tags