Vagrantプロジェクトディレクトリを既存のVirtualBox VMに関連付けるにはどうすればよいですか?


132

どういうわけか、私のVagrantプロジェクトはVirtualBox VMから切り離されているため、vagrant upVagrantがベースボックスをインポートして新しい仮想マシンを作成します。

Vagrantプロジェクトを既存のVMに再度関連付ける方法はありますか?VagrantはどのようにしてVagrantfileをVirtualBox VMディレクトリに内部的に関連付けますか?

回答:


89

警告:以下のソリューションはVagrant 1.0.xで機能しますが、機能しません

Vagrantは、「Vagrantfile」と同じディレクトリにある「.vagrant」ファイルを使用して、VMのUUIDを追跡します。VMが存在しない場合、このファイルは存在しません。ファイルの形式はJSONです。単一のVMが存在する場合、次のようになります。

{
   "active":{
      "default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
   }
}

default はデフォルトの仮想マシンの名前です(マルチVMセットアップを使用していない場合)。

VMが何らかの形で関連付けが解除された場合、VBoxManage list vmsVirtualBoxが知っているすべてのVMをその名前とUUIDで一覧表示することができます。次に、手動で.vagrant同じディレクトリにファイルを作成Vagrantfileし、内容を適切に入力します。

実行vagrant statusして、Vagrantが適切な変更を取得したことを確認します。

注:これはVagrantによって正式にサポートされておらず、Vagrantは.vagrantいつでもの形式を変更する可能性があります。ただし、これはVagrant 0.9.7以降で有効であり、Vagrant 1.0でも有効です。


驚くばかり!ありがとうございました。何か足りない感じがしました。
jrdmcgr

48
Vagrant 1.1の場合、UUIDはのマシン固有のファイルに保存されます.vagrant/machines/{name}/{provider}/id。実際、ファイルに含まれるのはUUIDだけです。

2
私はこのトリックを試しましたが、浮浪者ステータスは単に作成されていない状態を報告します。Vagrant upは新しいvmを作成し、正常に動作します。idファイルを変更すると、作成したボックスのuuidに戻しても、作成されなかったと報告されます。
Reece Marsland 2013年

4
Vagrant 1.1以降では、IDの末尾に改行を追加しないでください。詳細については、github.com / mitchellh / vagrant / issues / 1755をご覧ください
MadsMobæk2013年

1
私のプロファイル(Mac)で.vagrantを探していました。(少なくとも私にとっては)cookbooksフォルダーとVagrantFileと同じフォルダーにあったことに注意してください。(Vagrantバージョン1.4.3)
アリカン

208

Vagrant 1.6.3の場合、以下を実行します。

1)Vagrantfileがあるディレクトリで、コマンドを実行します

VBoxManage list vms

次のようなものになります:

"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

2)次のパスに移動します。

cd .vagrant/machines/default/virtualbox

3)というファイルを作成します 、IDあなたのVMのIDとをXXXXXXXXXXXX-XXXXXXXX-XXXXXXXXXXXX

4)ファイルを保存し、実行します浮浪者まで


8
改行なしでidファイルを作成する良い方法はです。echo -n '<your id here>' > id
Xiong Chiamiov 2015

1
よく働く。しかし、なぜこれが起こるのでしょうか?
JohnnyQ、2015年

Vagrant 1.7.2で動作しました。ありがとう!
Rafen、2016

1
完璧に働きました。
Casey Robinson

#test1とtest2ボックス...for box in test1 test2; do virtualboxid=$(VBoxManage list vms | grep $box | cut -d' ' -f2); echo -n $virtualboxid > .vagrant/machines/$box/virtualbox/id; done
luismartingil

48

上位バージョンのソリューションはまったく同じです。

ただし、最初に.vboxファイルを手動で起動して、 VBoxManage list vms

次に.vagrant/machines/default/virtualbox/id、uuidが正しいものであることを確認するためにチェックできます。


4
また、idファイルを編集する場合は、1行に保つ必要があることに注意してください。どういうわけか、最後の改行は好きではありません(私のテキストエディターはデフォルトでそれを追加するため、問題が発生しました)。
Dan2552 2013

フォルダーの名前を変更したため、この問題が発生しました。Vagrantは、既存のVMを使用するのではなく、フォルダーと同じ名前で新しいVMを作成することを強く要求しました。.vagrant1.0形式のファイルを作成して修正し、自動的にアップグレードしました。すぐに、実際には古いVMの名前が新しいプロジェクトディレクトリの名前に変更されました。
ジョナ

2
vagrant / machines / default / virtualbox / idが間違ったVirtualBoxマシンIDをポイントしているため、切断の原因がわかりません。助けになったファイルは$ HOME / .VirtualBox / VirtualBox.xmlでした。VirtualBoxマシンのUUIDがマシン名にマッピングされたMachineRegistryセクションがあります。たとえば、<MachineEntry uuid = "{f232f951-103b-af28-9f8d-b2ab21bs258f}" src = "$ HOME / VirtualBox VMs \ <machine-name> \ <machine-name> .vbox" />
arntg

14

今日問題があったのですが、.vagrantフォルダーが見つからず、単にIDを設定するよりもいくつかの手順があることがわかりました。

  1. IDを設定します。

    VBoxManage list vms
    

    IDを見つけてに設定し{project-folder}/.vagrant/machines/default/virtualbox/idます。

    egでdefault設定した場合は異なる場合があることに注意してください。Vagrantfileconfig.vm.define "someothername"

  2. マシンのプロビジョニングを停止します。

    ファイルとaction_provision同じディレクトリに名前が付けられたファイルを作成し、そのid内容を次のように設定します。手順1で見つかったIDに1.5:{id}置き換え{id}ます。

  3. 新しい公開鍵/秘密鍵を設定します。

    Vagrantは.vagrant/machines/default/virtualbox/private_key、マシンにSSH接続するために格納されている秘密鍵を使用します。新しいものを生成する必要があります。

    ssh-keygen -t rsa
    

    名前を付けprivate_keyます。

    vagrant ssh次にをにコピーprivate_key.pub/home/vagrant/.ssh/authorized_keysます。


「authorized_keys」はファイルまたはディレクトリですか?
user2568374 2017

それはファイルであり、それを検索すると、たくさんのものを見つけるでしょう、それは標準のsshのことです
Petecoop

同じキーを使用していたため、最後のsetp(3番目)を実行する必要はありませんでした。そうでなければ、本当によく説明され、すべてが完璧です。
Dazag

win10の3番目のステップを実行する方法?
navono

9

今日、Vagrant 1.7.4で同じ問題を更新します。

たとえば、ボックス 'vip-quickstart_default_1431365185830_12124'をvagrantとペアリングするには、

$ VBoxManage list
"vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27}
$ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id

6

マルチVMセットアップの場合、次のようになります。

{
   "active":{
        "web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
        "db":"13503bc5-76b8-4c26-95c4-32435b372212"
   }
}

これらのVMの作成に使用されたVagrantfileからVM名を取得できます。この行を探します:

config.vm.define :web do |web_config|

この場合、「web」はVMの名前です。


そして、dbはデフォルトのVMですか?
Robert

1
ここにはデフォルトがないと思います。webとdbだけです。Vagrantfileに応じて、どのVMが最初に構築されるかの順序があります。
agwntr 2014

5

私が使用していますベイグラント1.8.1をOSXエルキャピタン

コンピューターが再起動したときに私のvmが正しくシャットダウンされなかったので、試しvagrant upてみると常に新しいvmが作成されていました。ここでは解決策はありませんでした。しかし、うまくいったのは、ingmmurilloの答えのバリエーションでした。

したがって.vagrant/machines/default/virtualbox/id、実行中のIDに基づいて作成する代わりにVBoxManage list vms。私はIDを更新する必要がありました.vagrant/machines/local/virtual_box/id

私は本質的にこれを私のために行うワンライナーを持っています:

echo -n `VBoxManage list vms | head -n 1 | awk '{print substr($2, 2, length($2)-2)}'` > .vagrant/machines/local/virtualbox/id

これは、最初のボックスが実行から開始する必要があるボックスであることを前提としています VBoxManage list vms


4

これは@Petecoopの回答から変更されています

vagrant haltボックスをまだシャットダウンしていない場合に実行します。

次に、仮想ボックスをリストします。 VBoxManage list vms

すべての仮想ボックスが一覧表示されます。元に戻すボックスを特定し、中かっこの間のIDを取得します{}

次に、プロジェクトIDファイルを編集します:(sudo nano .vagrant/machines/default/virtualbox/idプロジェクトディレクトリから)

VBのリストからコピーしたIDに置き換えます。

お試しくださいvagrant reload

それが機能せず、SSH認証(私がつまずいたところ)でハングアップする場合は、安全でない公開鍵をvagrant gitからコピーします。の内容を置き換え/.vagrant/machines/default/virtualbox/private_keyます。もちろん元のファイルをバックアップしますcp private_key private_key-bak

次にを実行しvagrant reloadます。安全でないキーが特定され、新しいキーが作成されると言います。

default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!

これで準備は完了です。


3

Vagrant 1.9.1の場合:

「Ubuntu 16.04.1」という名前の仮想ボックスにVMがあったので、それをvagrant boxとしてパッケージ化しました。

vagrant package --base "Ubuntu 16.04.1"

応答する...

==> Ubuntu 16.04.1: Exporting VM...
==> Ubuntu 16.04.1: Compressing package to: blah blah/package.box

0

私はmacosを使用していて、ボックスの.locksを削除すると問題が解決することがわかりました。

何らかの理由で

vagrant halt

これらのロックは削除されませんでした。timemachineを使用して.vagrant / machine / default / virtualboxのすべての設定を復元した後、ロックを削除すると、適切なマシンが起動しました。

残っているのは1つのマイナーな問題のみです。grubで起動したため、Enterキーを1回押す必要がありました。これが残っているかどうかはわかりませんが、すぐにわかります。

vagrant 1.7.4とvirtualbox 5.0.2を実行しています

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