我已经在两个只能通过中间服务器(我没有su权限)进行通信的ubuntu主机上安装了lxd.我在localhost上创建了一个容器,现在希望在远程服务器上加载容器.
我在lxc / lxd repo中查阅了basic.sh测试脚本以确认我正在使用正确的方法(我发现我误解了图像与容器的方式).
我在我的localhost上创建了一个容器测试,在其中安装了所有必需的东西,停止它,发布它,并执行以下命令:
lxc image export test
这给了我一个tarball 42cf01c53cb9e … 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)
basic.sh脚本让我相信我正在遵循正确的路线(除了tar.gz vs tar.xz descrepancY).我能够导出标准图像并获得.xz文件(当我使用lxd-images获取它们时).例如,
lxd-images import ubuntu --alias ubuntu lxc image export ubuntu
生成一个Meta-ubuntu … tar.xz和ubuntu … tar.xz文件,可以导入(在不同的服务器上)
lxc image import Meta...tar.xz rootfs ubuntu...tar.xz --alias imported_ubuntu
如何在主机之间复制容器?
谢谢!
编辑:我进一步调查并发布了我的测试容器,它创建了它的图像.然后,当我导出它时,我得到了.gz文件(没有元数据).如果我从原始图像中劫持元数据,那么虽然导入不再对我崩溃,但我无法启动容器 – 我显然不知道我在做什么.使用lxd的remote:方法(使用lxd配置添加主机后)将映像拉到第二个主机不会导致它出现在lxc images列表中.
lxd(v2.0)的后期发布(非beta版)似乎解决了我的问题.这些步骤可以在优秀的文档
here中找到:
原文链接:https://www.f2er.com/ubuntu/348047.html>在主机A上发布图像(不停止容器);
$lxc publish --force container_name --alias image_name Container published with fingerprint: d2fd708361...a125d0d5885
>将图像导出到文件;
$lxc image export image_name Output is in dd2fd708361...a125d0d5885.tar.gz
>将文件复制到主机B,然后导入;
$lxc image import dd2fd708361...a125d0d5885.tar.gz --alias image_name Transferring image: 100%
>在主机B上启动容器(从图像中);
$lxc launch image_name container_name Creating container_name Starting container_name
在某些情况下,publish命令可能导致分割xz tar-ball —但两种格式都是supported.只需导入元数据和rootfs组件
lxc image import <Metadata tarball> <rootfs tarball> --alias image_name