中間サーバー(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画像リスト。
Lxd(v2.0)の新しいリリース(非ベータ版)で問題が解決したようです。優れたドキュメント here にある手順は次のとおりです。
ホスト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
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
を使用して画像を公開できます
彼の残りの指示に従ってください。
Socatまたはnetcatまたはgcc/python/Perl/tcpでリッスンできるものなら、中間サーバーでリッスンして、接続を他のホストに転送することもできます