web-dev-qa-db-ja.com

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

どういうわけか、私のVagrantプロジェクトはVirtualBox VMとの関連付けを解除したため、vagrant up Vagrantがベースボックスをインポートして新しい仮想マシンを作成します。

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

128
jrdmcgr

警告:以下のソリューションは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でも有効です。

89
Mitchell

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を実行します

197
ingmmurillo

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

ただし、最初に.vboxファイルを手動で起動して、VBoxManage list vmsに表示されるようにする必要があります

次に、.vagrant/machines/default/virtualbox/idをチェックして、uuidが正しいことを確認します。

48
Natim

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

  1. IDを設定します。

    VBoxManage list vms
    

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

    defaultに設定されている場合、Vagrantfileは異なる場合があります。 config.vm.define "someothername"

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

    idファイルと同じディレクトリにaction_provisionという名前のファイルを作成し、その内容を1.5:{id}に設定します。{id}をステップ1で見つかった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にコピーします。

13
Petecoop

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
9
eton_ceb

マルチ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の名前です。

6
agwntr

私は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の実行から開始する必要があるものであることを前提としています

5
Brendan

これは、 @ 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!

あなたはすべて準備ができているはずです。

3
ethicka

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
3
PeterVermont

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

何らかの理由で

vagrant halt

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

マイナーな問題が1つだけ残っています。grubで起動したため、Enterキーを1回押す必要がありました。

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

0
dmaij