我已经在两个只能通过中间服务器(我没有 su 权限)进行通信的 ubuntu 主机上安装了 lxd。我已经在我的本地主机上创建了一个容器,现在希望在远程服务器上加载容器。
我查阅了lxc/lxd 存储库中的basic.sh测试脚本以确认我使用的是正确的方法(我在此过程中发现我误解了图像与容器)。
我在我的本地主机上创建了一个容器测试,在其中安装了所有必要的东西,停止它,发布它,并执行以下命令:
lxc image export test
Run Code Online (Sandbox Code Playgroud)
这给了我一个 tarball 42cf01c53cb9e...83e3c48.tar.gz(在此处缩短),如文档中所述(我正在运行 lxc 和 lxd 版本 2.0.0.beta3)。尝试通过以下方式在同一主机上导入该图像
lxc image import 42cf01c53cb9e...83e3c48.tar.gz --alias testimage
Run Code Online (Sandbox Code Playgroud)
产生错误:
exit status 2 (tar: metadata.yaml: Not found in archive)
Run Code Online (Sandbox Code Playgroud)
该basic.sh脚本使我相信,我是下虽然正确的路由(除了将tar.gz VS tar.xz descrepancY)。我能够导出标准图像并获取 .xz 文件(当我使用 lxd-images 获取它们时)。例如,
lxd-images import ubuntu --alias ubuntu
lxc image export ubuntu
Run Code Online (Sandbox Code Playgroud)
生成一个meta-ubuntu...tar.xz和ubuntu...tar.xz文件,可以导入(在不同的服务器上)
lxc image import meta...tar.xz rootfs ubuntu...tar.xz --alias imported_ubuntu
Run Code Online (Sandbox Code Playgroud)
如何在主机之间复制容器?
谢谢!
编辑:我进一步调查并发布了我的测试容器,它创建了它的图像。然后我在导出时得到了 .gz 文件(没有元数据)。如果我从原始图像中劫持元数据,那么我将无法启动容器,尽管导入不再对我崩溃——我显然不知道我在做什么。使用 lxd …