Ubuntu

在主機之間複製 lxd 容器

  • November 15, 2016

我已經在兩個只能通過中間伺服器進行通信的 ubuntu 主機上安裝了 lxd(我沒有 su 權限)。我在本地主機上創建了一個容器,現在希望將容器載入到遠端伺服器上。

我查閱了lxc/lxd 儲存庫中的basic.sh測試腳本,以確認我使用了正確的方法(我發現我誤解了圖像與容器)。

我在本地主機上創建了一個容器測試,在其中安裝了所有必要的好東西,停止它,發布它,並執行以下命令:

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 decrepancY 除外)我能夠導出標準圖像並獲得一個 .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 的remote:方法將圖像拉到第二台主機(在使用 lxd 配置添加主機之後)不會導致它出現在lxc images list 中

lxd (v2.0) 的最新版本(非測試版)似乎解決了我的問題。這些步驟可以在此處的優秀文件中找到,包括:

  1. 在主機 A 上發布鏡像(不停止容器);
$ lxc publish --force container_name --alias image_name
Container published with fingerprint: d2fd708361...a125d0d5885
  1. 將圖像導出到文件;
$ lxc image export image_name 
Output is in dd2fd708361...a125d0d5885.tar.gz
  1. 將文件複製到主機B,並導入;
$ lxc image import dd2fd708361...a125d0d5885.tar.gz --alias image_name
Transferring image: 100%
  1. 在主機 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

引用自:https://serverfault.com/questions/759170