どういうわけか、私のVagrantプロジェクトはVirtualBox VMから関連付けを解除されたため、vagrant up
Vagrantがベースボックスをインポートして新しい仮想マシンを作成します。
Vagrantプロジェクトを既存のVMに再度関連付ける方法はありますか?VagrantはどのようにしてVagrantfileをVirtualBoxVMディレクトリに内部的に関連付けますか?
どういうわけか、私のVagrantプロジェクトはVirtualBox VMから関連付けを解除されたため、vagrant up
Vagrantがベースボックスをインポートして新しい仮想マシンを作成します。
Vagrantプロジェクトを既存のVMに再度関連付ける方法はありますか?VagrantはどのようにしてVagrantfileをVirtualBoxVMディレクトリに内部的に関連付けますか?
Vagrant 1.6.3の場合、次の手順を実行します。
1) Vagrantfile があるディレクトリで、次のコマンドを実行します。
VBoxManage list vms
次のようなものがあります。
"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
2) 次のパスに移動します。
cd .vagrant/machines/default/virtualbox
3) VM xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx の ID でidという名前のファイルを作成します。
4) ファイルを保存し、vagrant upを実行します。
警告:以下のソリューションは Vagrant 1.0.x では機能しますが、 Vagrant 1.1+では機能しません。
Vagrant は、「Vagrantfile」と同じディレクトリにある「.vagrant」ファイルを使用して、VM の UUID を追跡します。VM が存在しない場合、このファイルは存在しません。ファイルの形式は JSON です。単一の VM が存在する場合、次のようになります。
{
"active":{
"default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
}
}
default
は、デフォルトの仮想マシンの名前です (マルチ VM セットアップを使用していない場合)。
VM が何らかの形で関連付けを解除された場合、できることはVBoxManage list vms
、VirtualBox がその名前と UUID で認識しているすべての VM を一覧表示することです。.vagrant
次に、同じディレクトリに手動でファイルを作成Vagrantfile
し、内容を適切に入力します。
実行vagrant status
して、Vagrant が適切な変更を取得したことを確認します。
注:これは Vagrant によって公式にサポートされているわけではなく、Vagrant は.vagrant
いつでも の形式を変更する可能性があります。しかし、これは Vagrant 0.9.7 の時点で有効であり、Vagrant 1.0 でも有効になります。
今日問題が発生した場合、.vagrant
フォルダーが見つからず、単に ID を設定する以外にいくつかの手順が必要であることがわかりました。
ID を設定します。
VBoxManage list vms
id を見つけて に設定し{project-folder}/.vagrant/machines/default/virtualbox/id
ます。
egdefault
で設定すると異なる場合があることに注意してください。Vagrantfile
config.vm.define "someothername"
マシンのプロビジョニングを停止します。
action_provision
ファイルと同じディレクトリに名前の付いたファイルを作成し、そのid
内容を次のように設定します。ステップ 1 で見つかった ID1.5:{id}
に置き換えます。{id}
新しい公開鍵/秘密鍵をセットアップします。
Vagrant は、に保存されている秘密鍵を使用し.vagrant/machines/default/virtualbox/private_key
て、マシンに ssh します。新しいものを生成する必要があります。
ssh-keygen -t rsa
名前を付けてprivate_key
ください。
vagrant ssh
にコピーprivate_key.pub
し/home/vagrant/.ssh/authorized_keys
ます。
今日、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
マルチ 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 の名前です。
OSX El CapitanでVagrant 1.8.1を使用しています
コンピューターの再起動時に vm が正しくシャットダウンされなかったため、試しvagrant up
てみると常に新しい vm が作成されていました。ここで解決策はありませんでした。しかし、うまくいったのはingmmurilloの答えのバリエーションでした
したがって.vagrant/machines/default/virtualbox/id
、実行中の id に基づいて作成する代わりにVBoxManage list vms
. IDを更新する必要がありました.vagrant/machines/local/virtual_box/id
私は本質的に私のためにこれを行う1つのライナーを持っています:
echo -n `VBoxManage list vms | head -n 1 | awk '{print substr($2, 2, length($2)-2)}'` > .vagrant/machines/local/virtualbox/id
これは、最初のボックスが実行から開始する必要があるものであると想定していますVBoxManage list vms
私はmacosを使用していますが、ボックスの.locksを削除すると問題が解決することがわかりました。
何らかの理由で
vagrant halt
これらのロックを削除せず、timemachine を使用して .vagrant/machine/default/virtualbox のすべての設定を復元し、ロックを削除すると、適切なマシンが起動しました。
マイナーな問題が 1 つだけ残っています。grub で起動したので、Enter キーを 1 回押す必要がありました。これが残っているかどうかはわかりませんが、すぐにわかります。
vagrant 1.7.4 と virtualbox 5.0.2 を実行しています
私にとっては
cd yourVagrantProject/.vagrant/machines/default/virtualbox/
rm id
働きました。