Wie verknüpfe ich ein Vagrant-Projektverzeichnis mit einer vorhandenen VirtualBox-VM?

StackOverflow https://stackoverflow.com/questions/9434313

  •  12-11-2019
  •  | 
  •  

Frage

Irgendwie hat sich mein Vagrant-Projekt von seiner VirtualBox-VM getrennt, sodass ich, wenn ich vagrant up Vagrant importiert die Basisbox und erstellt eine neue virtuelle Maschine.

Gibt es eine Möglichkeit, das Vagrant-Projekt erneut mit der vorhandenen VM zu verknüpfen?Wie verknüpft Vagrant intern eine Vagrant-Datei mit einem VirtualBox-VM-Verzeichnis?

War es hilfreich?

Lösung

WARNUNG: Die folgende Lösung funktioniert jedoch für Vagrant 1.0.x nicht Landstreicher 1.1+.

Vagrant verwendet die Datei „.vagrant“ im selben Verzeichnis wie Ihre „Vagrantfile“, um die UUID Ihrer VM zu verfolgen.Diese Datei ist nicht vorhanden, wenn keine VM vorhanden ist.Das Format der Datei ist JSON.Wenn eine einzelne VM vorhanden ist, sieht es so aus:

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

default ist der Name der standardmäßigen virtuellen Maschine (wenn Sie keine Multi-VM-Setups verwenden).

Wenn Ihre VM irgendwie nicht mehr verknüpft ist, können Sie folgendes tun: VBoxManage list vms Dadurch wird jede VM, die VirtualBox kennt, mit ihrem Namen und ihrer UUID aufgelistet.Erstellen Sie dann manuell eine .vagrant Datei im selben Verzeichnis wie Ihre Vagrantfile und füllen Sie den Inhalt ordnungsgemäß aus.

Laufen vagrant status um sicherzustellen, dass Vagrant die richtigen Änderungen übernommen hat.

Notiz: Dies wird von Vagrant nicht offiziell unterstützt und Vagrant kann das Format ändern .vagrant jederzeit.Dies gilt jedoch ab Vagrant 0.9.7 und wird auch für Vagrant 1.0 gültig sein.

Andere Tipps

Für Landstreicher 1.6.3 Mach Folgendes:

1) Führen Sie in dem Verzeichnis, in dem sich Ihre Vagrantfile befindet, den Befehl aus

VBoxManage list vms

Sie werden so etwas haben:

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

2) Gehen Sie zu folgendem Pfad:

cd .vagrant/machines/default/virtualbox

3) Erstellen Sie eine Datei mit dem Namen Ausweis mit der ID Ihrer VM xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

4) Speichern Sie die Datei und führen Sie sie aus Landstreicher auf

Die Lösung mit der oberen Version ist ganz gleich.

Aber zuerst müssen Sie die .vbox-Datei manuell starten, damit sie in angezeigt wird VBoxManage list vms

Dann können Sie das überprüfen .vagrant/machines/default/virtualbox/id um zu überprüfen, ob die UUID die richtige ist.

Hatte das Problem heute, meine Güte .vagrant Der Ordner fehlte und es stellte sich heraus, dass einige weitere Schritte erforderlich waren, als nur die ID festzulegen:

  1. Legen Sie die ID fest:

    VBoxManage list vms
    

    Finden Sie die ID und legen Sie los {project-folder}/.vagrant/machines/default/virtualbox/id.

    Beachten Sie, dass default kann anders sein, wenn es in Ihrem eingestellt ist Vagrantfile z.B. config.vm.define "someothername".

  2. Stoppen Sie die Bereitstellung der Maschine:

    Erstellen Sie eine Datei mit dem Namen action_provision im selben Verzeichnis wie das id Datei, setzen Sie ihren Inhalt auf: 1.5:{id} ersetzen {id} mit der in Schritt 1 gefundenen ID.

  3. Richten Sie einen neuen öffentlichen/privaten Schlüssel ein:

    Vagrant verwendet einen privaten Schlüssel, der in gespeichert ist .vagrant/machines/default/virtualbox/private_key um per SSH in die Maschine einzudringen.Sie müssen ein neues generieren.

    ssh-keygen -t rsa
    

    Nennen Sie es private_key.

    vagrant ssh dann kopiere das private_key.pub hinein /home/vagrant/.ssh/authorized_keys.

Update mit dem gleichen Problem heute mit Vagrant 1.7.4:

Zum Beispiel, um die Box „vip-quickstart_default_1431365185830_12124“ mit „vagrant“ zu koppeln.

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

Für Multi-VM-Setups würde es so aussehen:

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

Sie können die VM-Namen aus der Vagrant-Datei abrufen, die zum Erstellen dieser VMs verwendet wurde.Suchen Sie nach dieser Zeile:

config.vm.define :web do |web_config|

„web“ ist in diesem Fall der Name der VM.

Ich benutze Landstreicher 1.8.1 An OSX El Capitan

Meine VM wurde beim Neustart meines Computers nicht richtig geschlossen, also als ich es versuchte vagrant up Es wurden immer neue VMs erstellt.Für mich haben hier keine Lösungen funktioniert.Aber was funktionierte, war eine Variation davon ingmmurillos Antwort

Also statt zu erschaffen .vagrant/machines/default/virtualbox/id basierend auf der ID vom Laufen VBoxManage list vms.Ich musste die ID aktualisieren .vagrant/machines/local/virtual_box/id

Ich habe einen Einzeiler, der das im Wesentlichen für mich erledigt:

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

Dies setzt voraus, dass die erste Box diejenige ist, die ich zum Starten benötige VBoxManage list vms

In Vagrant 1.9.1:

Ich hatte eine VM in Virtual Box mit dem Namen „Ubuntu 16.04.1“, also habe ich sie als Vagrant-Box verpackt mit:

vagrant package --base "Ubuntu 16.04.1"

antwortet mit...

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

Dies wurde geändert von @Petecoops Antwort.

Laufen vagrant halt falls Sie die Box noch nicht heruntergefahren haben.

Dann listen Sie Ihre Virtualboxen auf: VBoxManage list vms

Es werden alle Ihre Virtualboxen aufgelistet.Identifizieren Sie das Feld, zu dem Sie zurückkehren möchten, und erfassen Sie die ID zwischen den geschweiften Klammern: {}.

Bearbeiten Sie dann die Projekt-ID-Datei: sudo nano .vagrant/machines/default/virtualbox/id (aus dem Projektverzeichnis)

Ersetzen Sie es durch die ID, die Sie aus der Liste der VBs kopiert haben.

Versuchen vagrant reload.

Wenn das nicht funktioniert und die SSH-Autorisierung hängen bleibt (wo ich gestolpert bin), kopieren Sie den unsicheren öffentlichen Schlüssel von vagabundierender Idiot.Ersetzen Sie den Inhalt von /.vagrant/machines/default/virtualbox/private_key.Sichern Sie natürlich das Original: cp private_key private_key-bak.

Dann renne vagrant reload.Es wird angezeigt, dass der unsichere Schlüssel identifiziert wurde und ein neuer erstellt wird.

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!

Sie sollten bereit sein.

Ich verwende macOS und habe festgestellt, dass das Entfernen der .locks an den Boxen mein Problem gelöst hat.

Aus irgendeinem Grund

vagrant halt

Ich habe diese Sperren nicht entfernt, und nachdem ich alle meine Einstellungen in .vagrant/machine/default/virtualbox mit Timemachine wiederhergestellt und die Sperren entfernt hatte, wurde die richtige Maschine gestartet.

Es bleibt nur noch ein kleines Problem: Es wurde in Grub gebootet, also musste ich einmal die Eingabetaste drücken. Ich weiß nicht, ob das so bleibt, aber ich werde es früh genug herausfinden.

Ich verwende Vagrant 1.7.4 und Virtualbox 5.0.2

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top