Vagrant仮想マシンをエクスポートして転送する方法


107

Vagrant Boxが稼働しています(LAMPスタックで構成されています)。別のPCに転送する必要があります。どうすればエクスポートできますか?別のPCにコピーできる1つまたは複数のファイルを取得できるので、コマンドを実行して迷惑なボックスをインポートできると思います。


1
私は迷惑な箱の転送を自動化するためにいくつかのスクリプトを書きました。soniah / transfer_vagrant_boxesを
ソニアハミルトン

//、ソニアのスクリプトを試した人はいますか?
Nathan Basanese

@NathanBasanese AFAIU、これらのスクリプトは、迷惑なボックスの再パッケージ化を使用するため、実行中のVMではなく、ベースボックスの転送に役立ちます(ドキュメントを参照)
Olivier Berger

回答:


119

これには2つの方法があります。私はそれをダーティな方法クリーンな方法と呼びます。

1. 汚い方法

vagrant package次のコマンドを使用して、現在の仮想環境からボックスを作成します。

http://docs.vagrantup.com/v2/cli/package.html

次に、ボックスを他のPCにコピーし、それを使用vagrant box addして追加しvagrant up、通常どおり使用して実行します。

作業ディレクトリ(が付いているディレクトリ)内のファイルVagrantfileは仮想マシンの起動時に共有されるため、他のPCにもコピーする必要があることに注意してください。

2. クリーンな方法

理論的には、Vagrantを使用してエクスポート/インポートを行う必要はありません。仮想環境(chef、puppet、ansible)を構成するためのプロビジョニングを使用する先見性があり、作業ディレクトリにgitのようなバージョン管理システムがある場合、この時点で環境をコピーすることは、実行するだけで簡単です。

git clone <your_repo>
vagrant up

5
そのクリーンで先見の明のある管理者になろうとしています... gitリポジトリにOSインストールISOを配置する必要はありませんか?たとえば、あなたはそれを示唆していますか?ansibleを使用すると、リポジトリにはVagrantfileとansibleプレイブックが含まれます。Vagrantfileは1. vagrantcloudからベースボックスをダウンロードします2. ansibleプレイブックを実行して、他のfiles / repos / cloud-storageを使用してベースボックスをプロビジョニング/設定します。正しい?または、gitリポジトリに他に何かありますか?
ホブ、2014年

8
VM内にある可能性のあるデータベース(mySQL、Wordpress)の「クリーンな方法」アカウントはありますか?それを他のPCに同期するにはどうすればよいですか?
ケブラー2016

1
@kevllarクリーンな方法は、gitリポジトリの外部に新しい開発環境を開始するために必要な情報がないことを意味します。これは、データベースのインストールと構成が新しいChev / Puppet / what-have-youを介して新しいVagrant Boxのプロビジョニング中に完了することを意味します。
Hovis Biddle 2016

2
それで、ハシコープが推奨する方法も「汚い」ですか?つまり、ボックスをパッケージ化して、アトラスサーバーにアップロードしますか?「クリーン」な方法が実際に正確な環境を再現するかどうかは
わかりません

1
公式のやり方が汚いと見なされる方法を私は理解していません。良い魂が理由を説明できますか?
thclpr 2017

28

Macのハードドライブがプロジェクトの途中でビープ音を発していたため、SSDを取り付けることにしました。プロジェクトをあるディスクから別のディスクに移動する必要がありました。考慮すべきいくつかのこと:

  • 私はMacのvirtualboxで浮浪者です
  • 私はgitを使っています

これは私のために働いたものです:

1.) Copy your ~/.vagrant.d directory to your new machine.
2.) Copy your ~/VirtualBox\ VMs directory to your new machine. 
3.) In VirtualBox add the machines one by one using **Machine** >> **Add**
4.) Run `vagrant box list` to see if vagrant acknowledges your machines. 
5.) `git clone my_project`
6.) `vagrant up`

VB Guestの追加に関していくつか問題がありました。

ここに画像の説明を入力してください

はこの解決策でそれらを修正しました


//、これを試すつもりです、@ KJPrince。分解していただきありがとうございます。
Nathan Basanese

//、私はそれを試してみましたが、私は〜/ VirtualBoxの\ VMへの上で、私のVirtualBoxVMsディレクトリをコピーされたとき、私は次のリンクでのエラーを得た、とRAN vagrant box list0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/...
ネイサンバサネーゼ

18

これは実際にはかなり簡単です

  1. 仮想マシンとvagrantをリモートマシンにインストールする
  2. あなたの浮浪者機械を包みなさい

    vagrant package --base [machine name as it shows in virtual box] --output /Users/myuser/Documents/Workspace/my.box

  3. ボックスをリモコンにコピーします

  4. 次のコマンドを実行して、リモートマシンのボックスを初期化します。

    vagrant init [machine name as it shows in virtual box] /Users/myuser/Documents/Workspace/my.box

  5. 走る vagrant up


1
マシン名が長く、Virtualbox GUIを見てそれを入力するのが面倒な場合は、名前またはIDを入力しますVBoxManage list vms。次のターミナルコマンドを使用して、すべてのVMの名前とIDを一覧表示できます。@Philの2番目と4番目のステップで指示されている内容をコピーして実行できます。:)うん。
シド

@SIDなぜ$のバガントボックスリストではない
Ken Ratanachai S.

@KenRatanachaiSコマンドはボックスをリストするため、たとえば:(scotch/box (virtualbox, 3.0))。私のコマンド-識別子を持つ仮想マシン。例:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Sid


2

上記の答えはどれもうまくいきませんでした。2日間、Vagrant + VirtualBoxマシンをコンピュータから別のコンピュータに移行する方法を模索しています...可能です!

まず、仮想マシンが同期/共有フォルダーから分離されていることを理解する必要があります。つまり、マシンをパックするときは、ファイルなしで、データベースとともにマシンをパックします。

するべきこと:

1-コンピューター1のホストコンピューターのCMDを開き(コマンドライン。右ボタンで[管理者]として開きます-> [管理者として実行])、インストールされているvagrantファイルに移動します。私の場合:C:/ VVV Vagrantfileとこれらのフォルダーも表示されます。

/config/
/database/
/log/
/provision/
/www/
Vagrantfile
...

/ www /フォルダーには、開発ドメインと同期フォルダーがあります。同期フォルダが別の場所にある可能性があります。何をしているかを必ず理解してください。また、/ configおよび/ databaseは同期フォルダーです。

2-次のコマンドを実行します。 vagrant package --vagrantfile Vagrantfile

(このコマンドは、Vagrantfile構成を使用して仮想マシンのパッケージを実行します。)

これは、コマンドに関するVagrantのドキュメントで読むことができるものです。

よくある誤解は、--vagrantfileオプションがvagrant initがこのボックスで使用されるときに使用されるVagrantfileをパッケージ化することです。これはそうではありません。その代わり、ボックスを使用すると、Vagrantfileが読み込まれ、Vagrantロードプロセスの一部として読み込まれます。詳細については、Vagrantfileの読み込み順序をご覧ください。

https://www.vagrantup.com/docs/cli/package.html

完了すると、package.boxファイルが作成されます。

3-これらすべてのファイル(/config、/database、Vagrantfile、package.boxなど)をコピーして、仮想マシンをインストールする場所(私の場合はD:/ VVV)のコンピューター2に貼り付けます。

これで、コンピューター2ホストで必要なすべてのコピーが手に入りました。

4-これを実行します。 vagrant box add package.box --name VVV

(--nameは仮想マシンの名前に使用されます。私の場合はVVVという名前です)(この名前の仮想マシンがすでにあり、それを上書きしたい場合は、-forceを使用できます。(注意して使用してください!))

これにより、新しいVagrant Virtual Machineが解凍されます。

5-終了したら、次を実行: vagrant up

マシンがインストールされ、「Oracle Virtual Machine Box Manager」に表示されます。仮想マシンが表示されない場合は、Oracle VMボックスを管理者として実行してみてください(右クリック->管理者として実行)。

これですべてが大丈夫ですが、ホストが期待どおりかどうかを確認してください。

c:/windows/system32/hosts

6-たぶん、ホストファイルをコンピュータ1からコンピュータ2にコピーすることをお勧めします。または、必要な行をコピーします。私の場合、これらは私が必要とするホストです:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

ここで、192.168.50.4は私の仮想マシンのIPであり、test.devとvvv.devは開発中のホストです。

これがあなたのお役に立てば幸いです:)あなたのご意見をフィードバックいただければ幸いです。

あなたが見つけるかもしれない私のケースのいくつかの特殊性:

私が迷惑をかけたとき、mysqlに問題があり、動作していませんでした。仮想サーバーで実行する必要がありました(Oracle仮想マシンを右クリックして、[コンソールの表示]をクリック)。apt-get install mysql-server

この後、私はふらふらと走りましたが、すべてが機能していましたが、データベースのデータはありませんでした。そのため、コンピューター1からmysqldumpのすべてのテーブルを実行し、それらをコンピューター2にアップロードしました。

その他の注意: 仮想マシンが正確にコンピューター1とコンピューター2にありません。たとえば、少し前に内部構成をNFSを使用して(サーバーの同期フォルダーを高速化するために)作成し、コンピューター2でこのコマンドを再度実行する必要がありました。ホスト:vagrant plugin install vagrant-winnfsd



0

2019現在、サブコマンドがあります: vagrant box repackage

vagrant box repackage --help 
Usage: vagrant box repackage <name> <provider> <version>
    -h, --help                       Print this help

あなたは見つけることができname providerversion実行することによってvagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

の出力 vagrant box repackageはと呼ばれるpackage.boxファイルで、基本的には次のようにコンテンツをリストできるtgzファイルです。

tar tzf package.box
./metadata.json
./box.ovf
./Vagrantfile
./box-disk001.vmdk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.