回答:
警告:以下のソリューションはVagrant 1.0.xで機能しますが、機能しません。
Vagrantは、「Vagrantfile」と同じディレクトリにある「.vagrant」ファイルを使用して、VMのUUIDを追跡します。VMが存在しない場合、このファイルは存在しません。ファイルの形式はJSONです。単一のVMが存在する場合、次のようになります。
{
"active":{
"default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
}
}
default
はデフォルトの仮想マシンの名前です(マルチVMセットアップを使用していない場合)。
VMが何らかの形で関連付けが解除された場合、VBoxManage list vms
VirtualBoxが知っているすべてのVMをその名前とUUIDで一覧表示することができます。次に、手動で.vagrant
同じディレクトリにファイルを作成Vagrantfile
し、内容を適切に入力します。
実行vagrant status
して、Vagrantが適切な変更を取得したことを確認します。
注:これはVagrantによって正式にサポートされておらず、Vagrantは.vagrant
いつでもの形式を変更する可能性があります。ただし、これはVagrant 0.9.7以降で有効であり、Vagrant 1.0でも有効です。
.vagrant/machines/{name}/{provider}/id
。実際、ファイルに含まれるのはUUIDだけです。
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)ファイルを保存し、実行します浮浪者まで
id
ファイルを作成する良い方法はです。echo -n '<your id here>' > id
for box in test1 test2; do virtualboxid=$(VBoxManage list vms | grep $box | cut -d' ' -f2); echo -n $virtualboxid > .vagrant/machines/$box/virtualbox/id; done
上位バージョンのソリューションはまったく同じです。
ただし、最初に.vboxファイルを手動で起動して、 VBoxManage list vms
次に.vagrant/machines/default/virtualbox/id
、uuidが正しいものであることを確認するためにチェックできます。
id
ファイルを編集する場合は、1行に保つ必要があることに注意してください。どういうわけか、最後の改行は好きではありません(私のテキストエディターはデフォルトでそれを追加するため、問題が発生しました)。
.vagrant
1.0形式のファイルを作成して修正し、自動的にアップグレードしました。すぐに、実際には古いVMの名前が新しいプロジェクトディレクトリの名前に変更されました。
今日問題があったのですが、.vagrant
フォルダーが見つからず、単にIDを設定するよりもいくつかの手順があることがわかりました。
IDを設定します。
VBoxManage list vms
IDを見つけてに設定し{project-folder}/.vagrant/machines/default/virtualbox/id
ます。
egでdefault
設定した場合は異なる場合があることに注意してください。Vagrantfile
config.vm.define "someothername"
マシンのプロビジョニングを停止します。
ファイルとaction_provision
同じディレクトリに名前が付けられたファイルを作成し、そのid
内容を次のように設定します。手順1で見つかったIDに1.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の名前です。
私が使用していますベイグラント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
これは@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!
これで準備は完了です。
私はmacosを使用していて、ボックスの.locksを削除すると問題が解決することがわかりました。
何らかの理由で
vagrant halt
これらのロックは削除されませんでした。timemachineを使用して.vagrant / machine / default / virtualboxのすべての設定を復元した後、ロックを削除すると、適切なマシンが起動しました。
残っているのは1つのマイナーな問題のみです。grubで起動したため、Enterキーを1回押す必要がありました。これが残っているかどうかはわかりませんが、すぐにわかります。
vagrant 1.7.4とvirtualbox 5.0.2を実行しています