web-dev-qa-db-ja.com

ホスト間でlxdコンテナーをコピーする

中間サーバー(su権限がないサーバー)を介してのみ通信できる2つのubuntuホストにlxdをインストールしました。ローカルホストにコンテナを作成しましたが、リモートサーバーにコンテナをロードしたいと思います。

Lxc/lxdリポジトリの basic.sh テストスクリプトを参照して、正しいアプローチを使用していることを確認しました(途中でイメージとコンテナーを誤解していることがわかりました)。

私は自分のローカルホストにコンテナーtestを作成し、その中に必要なすべての機能をインストールし、停止して公開し、次のコマンドを実行しました。

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)

basic.sh スクリプトは、私が正しいルートをたどっていると信じさせます(tar.gzと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:アプローチを使用してイメージを2番目のホストにプルすると(lxd configを使用してホストを追加した後)、lxc画像リスト

6
0_0

Lxd(v2.0)の新しいリリース(非ベータ版)で問題が解決したようです。優れたドキュメント here にある手順は次のとおりです。

  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
    

場合によっては、publishコマンドが分割xz tar-ball ---につながる可能性がありますが、どちらの形式も supported です。単にメタデータとrootfsコンポーネントをインポートします

    lxc image import <metadata tarball> <rootfs tarball> --alias image_name
12
0_0

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を使用して画像を公開できます

彼の残りの指示に従ってください。

4
Levi

Socatまたはnetcatまたはgcc/python/Perl/tcpでリッスンできるものなら、中間サーバーでリッスンして、接続を他のホストに転送することもできます

0
theblazehen