如何打开现有的 LXD 容器?

如何打开现有的 LXD 容器?

我安装了 Ubuntu 16.04,xfce 桌面也很好用。我安装了 LXD,将我的图像和容器放在我的第二个大驱动器上,并在 中配置了指向所述图像和容器的符号链接/var/lib/lxd/。一切都按预期运行。

我现在已在新驱动器上重新安装了 Ubuntu 16.04,Mate 桌面值得一试。我已安装 LXD 并创建了指向/var/lib/lxd大驱动器上图像和容器文件夹的符号链接(在 中)。

使用 lxc list 时,我的图像和容器均未列出(因此无法启动和使用它们)。

关于我需要做什么才能让我新安装的 LXD 使用我预先存在的图像和容器,有什么指示吗?

答案1

对于任何感兴趣的人来说,这个难题缺失的部分是我必须重新使用现有的 lxd 数据库lxd.db

因此,我在全新安装中使用现有 LXD 容器的步骤如下:

安装 LXD

sudo apt-get install lxd

删除containersimages目录

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 的新版本发布时随时切换,直到我满意为止不会删除旧版本。这真的很容易做到,而且已经成为我的第二天性。

lxd.db我知道这不是常见的做法,但这次它(再次)救了我一命。对于那些不这样做的人,建议备份文件。

编辑:进一步阅读https://insights.ubuntu.com/2016/04/13/lxd-2-0-remote-hosts-and-container-migration-612/表明使用远程 LXD 主机并在主机之间简单地移动容器也非常容易。

在这个特定的例子中,这不是我的解决方案,但它是一篇非常好的文章,展示了一种非常简单的迁移容器的方法。

答案2

由于我的评论包含一些错别字,我将重述一些有关将现有容器(其存储可用)导入新数据库的建议。

首先,如果想要复制整个 LXD 实例(基本上是获取所有容器的存储,加上数据库/var/lib/lxd),有(可以说)更简单的替代方案。此外,如果旧实例仍在运行并且可以通过网络访问,更原生的方法是将其定义为远程,如远程主机和容器迁移精彩的 Ubuntu Insights 章节LXD 2.0:博客文章系列


现在,该系列的另一章(同样,只有当旧实例仍在运行时才可行)是使用以下方法制作现有容器的映像:

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

然后将其导出到 tarball 中

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

生成的 tarball 可以使用以下方式导入

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

正如 OP 在评论中所说,这需要做很多工作。更严重的是,如果出于某种原因您无法运行旧实例,它就会失败。

从 2.7 版开始,LXDbackup.yaml在每个容器的存储中存储一个文件(位于/var/lib/lxd/containers/<my-container>),以便从副本导入容器,使用lxd import(请参阅LXD 备份策略和这个GitHub 问题)。请注意lxd;这与 不同lxc image import

根据LXD 新闻页面我认为只需将容器的存储移动到/var/lib/lxd/containers目录中,然后运行即可

lxd import <my-container>

但是,由于 Xenial 官方存储库目前提供 LXD 2.0.9 版本,所以我还没有测试最后一部分。

相关内容