どういうわけか、私のVagrantプロジェクトはVirtualBox VMとの関連付けを解除したため、vagrant up
Vagrantがベースボックスをインポートして新しい仮想マシンを作成します。
Vagrantプロジェクトを既存のVMに再度関連付ける方法はありますか? VagrantはVagrantfileをVirtualBox VMディレクトリに内部的にどのように関連付けますか?
警告:以下のソリューションはVagrant 1.0.xで機能しますが、notVagrant 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がリストされます。次に、Vagrantfile
と同じディレクトリに.vagrant
ファイルを手動で作成し、内容を適切に入力します。
vagrant status
を実行して、Vagrantが適切な変更を取得したことを確認します。
注:これはVagrantによって正式にサポートされておらず、Vagrantは.vagrant
の形式をいつでも変更する可能性があります。ただし、これはVagrant 0.9.7の時点で有効であり、Vagrant 1.0でも有効です。
Vagrant 1.6.の場合、以下を実行します。
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を実行します
上位バージョンのソリューションはまったく同じです。
ただし、最初に.vboxファイルを手動で起動して、VBoxManage list vms
に表示されるようにする必要があります
次に、.vagrant/machines/default/virtualbox/id
をチェックして、uuidが正しいことを確認します。
今日問題があった場合、私の.vagrant
フォルダーが見つからず、単にIDを設定するよりもいくつかのステップがあることがわかりました。
IDを設定します。
VBoxManage list vms
IDを見つけて、{project-folder}/.vagrant/machines/default/virtualbox/id
に設定します。
default
に設定されている場合、Vagrantfile
は異なる場合があります。 config.vm.define "someothername"
。
マシンのプロビジョニングを停止します。
id
ファイルと同じディレクトリにaction_provision
という名前のファイルを作成し、その内容を1.5:{id}
に設定します。{id}
をステップ1で見つかった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の名前です。
私はVagrant 1.8.1を使用していますOSX El Capitan
コンピューターの再起動時にvmが正しくシャットダウンされなかったため、vagrant up
を試してみると、常に新しいvmが作成されていました。ここで解決策はありませんでした。しかし、うまくいったのは ingmmurilloの答え のバリエーションでした
そのため、実行中の.vagrant/machines/default/virtualbox/id
に基づいてVBoxManage list vms
を作成する代わりに。 .vagrant/machines/local/virtual_box/id
の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
の実行から開始する必要があるものであることを前提としています
これは、 @ Petecoopの回答 から変更されています。
ボックスをまだシャットダウンしていない場合は、vagrant halt
を実行します。
次に、仮想ボックスをリストします:VBoxManage list vms
すべてのバーチャルボックスがリストされます。戻すボックスを特定し、中括弧で囲まれた{}
のIDを取得します。
次に、プロジェクトIDファイルを編集します:Sudo nano /.vagrant/machines/default/virtualbox/id
VBのリストからコピーしたIDに置き換えます。
vagrant reload
を試してください。
それがうまくいかず、SSH認証でハングアップする場合(つまずいた場所)、 から安全でない公開鍵をコピーします迷惑な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!
あなたはすべて準備ができているはずです。
Vagrant 1.9.1の場合:
「Ubuntu 16.04.1」という名前のVirtual Boxに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
Macosを使用していますが、ボックスの.locksを削除することで問題が解決したことがわかりました。
何らかの理由で
vagrant halt
これらのロックを削除しませんでした。timemachineを使用して.vagrant/machine/default/virtualboxのすべての設定を復元し、ロックを削除すると、適切なマシンが起動しました。
マイナーな問題が1つだけ残っています。grubで起動したため、Enterキーを1回押す必要がありました。
Vagrant 1.7.4とvirtualbox 5.0.2を実行しています