Как открыть существующий контейнер LXD?

У меня установлен Ubuntu 16.04, рабочий стол xfce для чего он стоит. У меня установлен LXD с моими изображениями и контейнерами на моем большом втором диске с символическими ссылками на указанные изображения и контейнеры, сконфигурированные в /var/lib/lxd/. Все работает как ожидалось.

Теперь я снова установил Ubuntu 16.04 на новый диск, настольный компьютер Mate, для чего он стоит. Я установил LXD и создал символические ссылки (в /var/lib/lxd) в мои папки с изображениями и контейнерами на моем большом диске.

Ни мои изображения, ни контейнеры не перечислены при использовании списка lxc (поэтому не удается запустить их и использовать их).

Любые указатели на то, что мне нужно сделать, чтобы мой недавно установленный LXD использовал мои ранее существующие изображения и контейнеры?

5
задан 8 May 2017 в 16:42

6 ответов

Для любого заинтересованного, недостающего фрагмента головоломки было то, что мне пришлось повторно использовать существующую базу данных lxd, lxd.db.

Итак, шаги для меня использовать мои ранее существующие контейнеры LXD на новой установке: -

Установить LXD

sudo apt-get install lxd

Удалить каталоги containers и images

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

Создать символические ссылки на мои ранее существовавшие каталоги containers и images.

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

Установите мой оригинальный установочный раздел и скопируйте файл lxd.db из моей первоначальной установки на мою новую установку

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

Мои контейнеры теперь отображаются, когда я перечисляю их и запускаю как ожидалось.

ПРИМЕЧАНИЕ. У меня несколько установок на нескольких разделах, и я прыгаю между новыми версиями Ubuntu по мере их появления и 't стереть более старую версию, пока я не буду счастлив. Это действительно легко сделать и только что стало второй натурой.

Я знаю, что это не обычная практика, но она (снова) спасла мой бекон по этому поводу. Для тех, кто этого не делает, рекомендуется сделать резервную копию файла lxd.db.

EDIT: Дальнейшее чтение на https://insights.ubuntu.com/2016/04/13/ lxd-2-0-remote-hosts-and-container-migration-612 / показывает, что также очень просто использовать удаленный хост LXD и просто перемещать conatiners между хостами.

Это не решение для меня, в данном конкретном случае, но это очень хорошее чтение, показывающее очень простой способ переноса контейнеров.

3
ответ дан 22 May 2018 в 22:48
  • 1
    Возможно, вы также могли бы lxd image import изображения, которые вы хотите повторно использовать в своем отдельном db. – Jonathan Y. 9 May 2017 в 16:04
  • 2
    Это не работает, поскольку я хочу использовать один из моих контейнеров, а не один из изображений, из которых был создан контейнер. Я выяснил, что я могу экспортировать контейнер в качестве изображения, повторно импортировать это изображение, а затем создать из него новый контейнер, но это просто показалось немного фафом. Интересно, есть ли способ просто экспортировать / импортировать контейнеры? – hatterman 9 May 2017 в 18:14
  • 3
    Существует, если ваша версия LXD выше 2,7. Если это так, хранилище контейнера содержит .ymal, который позволяет импортировать его в новый db. – Jonathan Y. 9 May 2017 в 19:09
  • 4
    Отлично. Не могли бы вы рассказать мне, как это работает или дать мне ссылку на то, как это сделать? – hatterman 9 May 2017 в 22:51
  • 5
    Поскольку я использую один и тот же компьютер с одним и тем же большим диском, только с установленной операционной системой, я считаю, что мой собственный ответ по-прежнему правилен (для меня, в данном случае). Однако, прочитав ответ от Джонатана Я, я попросил меня проверить сайт LXD (снова), и я видел, что удаленные хосты могут быть скопированы и перемещены очень легко, поэтому я добавил изменение в свой ответ. – hatterman 10 May 2017 в 18:29

Для любого заинтересованного, недостающего фрагмента головоломки было то, что мне пришлось повторно использовать существующую базу данных lxd, lxd.db.

Итак, шаги для меня использовать мои ранее существующие контейнеры LXD на новой установке: -

Установить LXD

sudo apt-get install lxd

Удалить каталоги containers и images

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

Создать символические ссылки на мои ранее существовавшие каталоги containers и images.

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

Установите мой оригинальный установочный раздел и скопируйте файл lxd.db из моей первоначальной установки на мою новую установку

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

Мои контейнеры теперь отображаются, когда я перечисляю их и запускаю как ожидалось.

ПРИМЕЧАНИЕ. У меня несколько установок на нескольких разделах, и я прыгаю между новыми версиями Ubuntu по мере их появления и 't стереть более старую версию, пока я не буду счастлив. Это действительно легко сделать и только что стало второй натурой.

Я знаю, что это не обычная практика, но она (снова) спасла мой бекон по этому поводу. Для тех, кто этого не делает, рекомендуется сделать резервную копию файла lxd.db.

EDIT: Дальнейшее чтение на https://insights.ubuntu.com/2016/04/13/ lxd-2-0-remote-hosts-and-container-migration-612 / показывает, что также очень просто использовать удаленный хост LXD и просто перемещать conatiners между хостами.

Это не решение для меня, в данном конкретном случае, но это очень хорошее чтение, показывающее очень простой способ переноса контейнеров.

3
ответ дан 18 July 2018 в 13:38

Для любого заинтересованного, недостающего фрагмента головоломки было то, что мне пришлось повторно использовать существующую базу данных lxd, lxd.db.

Итак, шаги для меня использовать мои ранее существующие контейнеры LXD на новой установке: -

Установить LXD

sudo apt-get install lxd

Удалить каталоги containers и images

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

Создать символические ссылки на мои ранее существовавшие каталоги containers и images.

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

Установите мой оригинальный установочный раздел и скопируйте файл lxd.db из моей первоначальной установки на мою новую установку

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

Мои контейнеры теперь отображаются, когда я перечисляю их и запускаю как ожидалось.

ПРИМЕЧАНИЕ. У меня несколько установок на нескольких разделах, и я прыгаю между новыми версиями Ubuntu по мере их появления и 't стереть более старую версию, пока я не буду счастлив. Это действительно легко сделать и только что стало второй натурой.

Я знаю, что это не обычная практика, но она (снова) спасла мой бекон по этому поводу. Для тех, кто этого не делает, рекомендуется сделать резервную копию файла lxd.db.

EDIT: Дальнейшее чтение на https://insights.ubuntu.com/2016/04/13/ lxd-2-0-remote-hosts-and-container-migration-612 / показывает, что также очень просто использовать удаленный хост LXD и просто перемещать conatiners между хостами.

Это не решение для меня, в данном конкретном случае, но это очень хорошее чтение, показывающее очень простой способ переноса контейнеров.

3
ответ дан 24 July 2018 в 20:13

Поскольку мои комментарии содержат некоторые опечатки, я приведу пару предложений по импорту существующего контейнера (чье хранилище доступно) в новую БД.

Во-первых, есть (возможно) более простые альтернативы если вы хотите скопировать весь экземпляр LXD (в основном, используя хранение всех контейнеров, плюс DB из /var/lib/lxd). Кроме того, если старый экземпляр по-прежнему работает и доступен по сети, более привычным подходом является определение его как удаленного, как описано в разделе «Удаленные хосты и перемещение контейнеров» в замечательной серии публикаций Ubuntu Insights LXD 2.0: Blog. [!d1 ]

Теперь один подход, описанный в Удаленные хосты и миграция контейнеров (опять же, возможно только в том случае, если старый экземпляр все еще запущен) заключается в создании образа существующего контейнер, используя

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

, затем экспортируйте его в tarballs с помощью

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

Полученные tarballs можно импортировать с помощью

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

Как сказал в комментариях OP, это довольно много работы. Более серьезным является то, что он терпит неудачу, если по какой-то причине вы не можете запустить старый экземпляр.

Начиная с версии 2.7 LXD хранит файл backup.yaml внутри хранилища каждого контейнера (в /var/lib/lxd/containers/<my-container>), что позволяет импортируя контейнер из копии, используя lxd import (см. Стратегии резервного копирования LXD и эту LXD 2.0: Серия сообщений в блоге ). Обратите внимание на lxd; это отличается от lxc image import.

Основываясь на стратегиях резервного копирования LXD , я полагаю, что это просто перемещает содержимое контейнера в каталог /var/lib/lxd/containers и запускает

lxd import <my-container>

Однако, поскольку официальные репозитории Xenial в настоящее время предлагают версию 2.0.9 LXD, я не тестировал эту последнюю часть.

0
ответ дан 22 May 2018 в 22:48
  • 1
    Это не то, как вы должны использовать импорт lxd. Я попробовал, и это не сработает. Вы поняли способ использовать его? – alexk 2 July 2017 в 16:05
  • 2
    @alexk Я не уверен, хотя: (а) это будет работать только на LXD 2.7 или выше, и (б) см. предоставленную ссылку. Если ваша версия выше 2.7, возможно, lxd import --help может направить вас в правильном направлении? Пожалуйста, отредактируйте этот ответ, если найдете способ его запуска. (Или опубликуйте сообщение об ошибке в комментарии.) – Jonathan Y. 2 July 2017 в 16:55
  • 3
    В этой дискуссии есть прогресс в этой теме: github.com/lxc/lxd/issues/3479 – alexk 3 July 2017 в 00:24

Поскольку мои комментарии содержат некоторые опечатки, я приведу пару предложений по импорту существующего контейнера (чье хранилище доступно) в новую БД.

Во-первых, есть (возможно) более простые альтернативы если вы хотите скопировать весь экземпляр LXD (в основном, используя хранение всех контейнеров, плюс DB из /var/lib/lxd). Кроме того, если старый экземпляр по-прежнему работает и доступен по сети, более привычным подходом является определение его как удаленного, как описано в разделе «Удаленные хосты и перемещение контейнеров» в замечательной серии публикаций Ubuntu Insights LXD 2.0: Blog.

Теперь один подход, описанный в Удаленные хосты и миграция контейнеров (опять же, возможно только в том случае, если старый экземпляр все еще запущен) заключается в создании образа существующего контейнер, используя

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

, затем экспортируйте его в tarballs с помощью

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

Полученные tarballs можно импортировать с помощью

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

Как сказал в комментариях OP, это довольно много работы. Более серьезным является то, что он терпит неудачу, если по какой-то причине вы не можете запустить старый экземпляр.

Начиная с версии 2.7 LXD хранит файл backup.yaml внутри хранилища каждого контейнера (в /var/lib/lxd/containers/<my-container>), что позволяет импортируя контейнер из копии, используя lxd import (см. Стратегии резервного копирования LXD и эту LXD 2.0: Серия сообщений в блоге ). Обратите внимание на lxd; это отличается от lxc image import.

Основываясь на стратегиях резервного копирования LXD , я полагаю, что это просто перемещает содержимое контейнера в каталог /var/lib/lxd/containers и запускает

lxd import <my-container>

Однако, поскольку официальные репозитории Xenial в настоящее время предлагают версию 2.0.9 LXD, я не тестировал эту последнюю часть.

0
ответ дан 18 July 2018 в 13:38

Поскольку мои комментарии содержат некоторые опечатки, я приведу пару предложений по импорту существующего контейнера (чье хранилище доступно) в новую БД.

Во-первых, есть (возможно) более простые альтернативы если вы хотите скопировать весь экземпляр LXD (в основном, используя хранение всех контейнеров, плюс DB из /var/lib/lxd). Кроме того, если старый экземпляр по-прежнему работает и доступен по сети, более привычным подходом является определение его как удаленного, как описано в разделе «Удаленные хосты и перемещение контейнеров» в замечательной серии публикаций Ubuntu Insights LXD 2.0: Blog.

Теперь один подход, описанный в Удаленные хосты и миграция контейнеров (опять же, возможно только в том случае, если старый экземпляр все еще запущен) заключается в создании образа существующего контейнер, используя

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

, затем экспортируйте его в tarballs с помощью

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

Полученные tarballs можно импортировать с помощью

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

Как сказал в комментариях OP, это довольно много работы. Более серьезным является то, что он терпит неудачу, если по какой-то причине вы не можете запустить старый экземпляр.

Начиная с версии 2.7 LXD хранит файл backup.yaml внутри хранилища каждого контейнера (в /var/lib/lxd/containers/<my-container>), что позволяет импортируя контейнер из копии, используя lxd import (см. Стратегии резервного копирования LXD и эту LXD 2.0: Серия сообщений в блоге ). Обратите внимание на lxd; это отличается от lxc image import.

Основываясь на стратегиях резервного копирования LXD , я полагаю, что это просто перемещает содержимое контейнера в каталог /var/lib/lxd/containers и запускает

lxd import <my-container>

Однако, поскольку официальные репозитории Xenial в настоящее время предлагают версию 2.0.9 LXD, я не тестировал эту последнюю часть.

0
ответ дан 24 July 2018 в 20:13
  • 1
    Это не то, как вы должны использовать импорт lxd. Я попробовал, и это не сработает. Вы поняли способ использовать его? – alexk 2 July 2017 в 16:05
  • 2
    @alexk Я не уверен, хотя: (а) это будет работать только на LXD 2.7 или выше, и (б) см. предоставленную ссылку. Если ваша версия выше 2.7, возможно, lxd import --help может направить вас в правильном направлении? Пожалуйста, отредактируйте этот ответ, если найдете способ его запуска. (Или опубликуйте сообщение об ошибке в комментарии.) – Jonathan Y. 2 July 2017 в 16:55
  • 3
    В этой дискуссии есть прогресс в этой теме: github.com/lxc/lxd/issues/3479 – alexk 3 July 2017 в 00:24

Другие вопросы по тегам:

Похожие вопросы: