在主机之间复制 lxd 容器

在主机之间复制 lxd 容器

我在两台 ubuntu 主机上安装了 lxd,它们只能通过中间服务器(我没有 su 权限)进行通信。我在本地主机上创建了一个容器,现在希望在远程服务器上加载该容器。

我咨询了基本操作我在 lxc/lxd repo 中测试了脚本,以确认我使用了正确的方法(在此过程中我发现我误解了图像和容器)。

我已经创建了一个容器测试在我的本地主机上,安装了所有必要的组件,停止它,发布它,并执行以下命令:

lxc image export test

这给了我一个 tarball42cf01c53cb9e...83e3c48.tar.gz(此处缩写),如文档中所述(我正在运行 lxc 和 lxd 版本 2.0.0.beta3)。尝试通过以下方式在同一主机上导入该映像

lxc image import 42cf01c53cb9e...83e3c48.tar.gz --alias testimage

产生错误:

exit status 2 (tar: metadata.yaml: Not found in archive)

基本操作脚本让我相信我遵循了正确的路线(除了 tar.gz 与 tar.xz 的差异)。我可以导出标准图像并获取 .xz 文件(当我使用 lxd-images 获取它们时)。例如,

lxd-images import ubuntu --alias ubuntu
lxc image export ubuntu

产生meta-ubuntu...tar.xzubuntu...tar.xz文件,可以导入(在不同的服务器上)

lxc image import meta...tar.xz rootfs ubuntu...tar.xz --alias imported_ubuntu

如何在主机之间复制容器?

谢谢!

编辑:我进行了进一步调查,并发布了我的测试容器,它创建了它的镜像。然后,当我导出它时,我得到了 .gz 文件(没有元数据)。如果我从原始图像中劫持元数据,那么我无法启动容器,尽管导入不再崩溃 --- 我显然不知道我在做什么。使用 lxd 将图像拉到第二台主机偏僻的:方法(使用 lxd 配置添加主机后)不会导致它出现在lxc 图像列表

答案1

后来的 lxd 版本(非测试版)(v2.0)似乎已经解决了我的问题。具体步骤可以在出色的文档中找到这里, 是:

  1. 在主机A上发布镜像(不停止容器);

    $ lxc publish --force container_name --alias image_name
    Container published with fingerprint: d2fd708361...a125d0d5885
    
  2. 将图像导出到文件;

    $ lxc image export image_name 
    Output is in dd2fd708361...a125d0d5885.tar.gz
    
  3. 将文件复制到主机B,并导入;

    $ lxc image import dd2fd708361...a125d0d5885.tar.gz --alias image_name
    Transferring image: 100%
    
  4. 在主机 B 上启动容器(来自镜像);

    $ lxc launch image_name container_name
    Creating container_name
    Starting container_name
    

在某些情况下,发布命令可能会导致 xz tar-ball 分裂 --- 但两种格式都是支持的只需使用以下命令导入元数据和 rootfs 组件

    lxc image import <metadata tarball> <rootfs tarball> --alias image_name

答案2

0_0 发布了一个很好的答案,但我还不允许发表评论,因此我只会发布他修改后的答案。

首先lxc publish --force container_name --alias image_name将停止容器并重新启动它,但是 OP 不希望停止容器。

你应该先使用lxc snapshot container_name snapshot_name

然后你可以使用lxc publish container_name/snapshot_name --alias image_name

现在只需按照他的其余指示进行操作即可。

答案3

如果你有 socat 或 netcat 或 gcc / python / perl / 任何可以监听 tcp 的东西,那么你也可以监听中间服务器并将连接转发到另一台主机

相关内容