2016-05-11 47 views
14

Desidero utilizzare la casella ubuntu/xenial64 per creare due VM separate per due progetti separati. Ho definito Vagrantfile in due directory di progetto separate e ho aggiunto la riga config.vm.box = "ubuntu/xenial64" a ciascuna.Errore Vagrant - Una macchina VirtualBox con il nome esiste già

La prima casella viene avviata correttamente. Ma quando lo faccio vagrant up per secondo progetto, ottengo l'errore

A VirtualBox machine with the name 'ubuntu-xenial-16.04-cloudimg' already exists. 

Nella documentazione di Vagrant è chiaramente scritto che

caselle vengono memorizzati a livello globale per l'utente corrente. Ogni progetto utilizza una casella come immagine iniziale da cui clonare e non modifica mai l'immagine di base effettiva . Ciò significa che se si hanno due progetti entrambi utilizzando la casellahashicorp/precise64 che abbiamo appena aggiunto, l'aggiunta di file in una macchina guest non avrà alcun effetto sull'altra macchina.

Perché quindi si verifica questo errore?

Ho già controllato other similar questions, ma non capisco la loro soluzione di eliminazione di macchine virtuali esistenti che sembrano avere lo stesso nome. Secondo la citazione della documentazione di Vagrant di cui sopra, questo non dovrebbe essere necessario. Mi sto perdendo qualcosa?

+0

sto diventando la sensazione che questo ha a che fare con il modo in casella 'ubuntu/xenial64' è stato creato. Ho ripetuto lo stesso esperimento con un'altra casella 'gbarbieru/xenial' e quella non ha alcun problema durante la creazione di più VM. Quando vedo la GUI di VirtualBox, vedo che il nome della macchina virtuale viene automaticamente rinominato per contenere il nome della cartella all'avvio. – Jayesh

+0

C'è un modo per specificare il nome senza modificare direttamente la casella?Preferisco usare le impostazioni predefinite di upstream e lasciare che tutto ciò vada via astratto vagante ... Questo e io preferirei essere in grado di far apparire la mia casella subito dopo un 'git checkout' invece di dover effettuare il checkout quindi modificare il file 'VagrantFile ' – Tor

risposta

19

Non è necessario eliminare l'altra VM e in effetti è possibile disporre di molte macchine virtuali dalla stessa casella.

il tuo errore potrebbe avere a che fare con il VirtualBox Nome della VM creata in VirtualBox, Se hai la precedenza su una proprietà per impostare questo nome e lo stesso nome sui tuoi 2 progetti allora ci sarà una collisione, vedi questo answer per vedere i diversi modi per definire il nome del VM

quindi o lasciare vagabondo definire il nome della macchina virtuale o assicurarsi di avere nome univoco VM nel progetto diverso e verrà eseguito bene

UPDATE Controllo questa casella particolare e contiene il seguente Vagrantfile

Vagrant.configure("2") do |config| 
    config.vm.base_mac = "02101FC67BA9" 
    config.ssh.username = "ubuntu" 
    config.ssh.password = "c1580f876b655137c6c35b69" 
    config.vm.synced_folder '.', '/vagrant', disabled: true 

    config.vm.provider "virtualbox" do |vb| 
    vb.name = "ubuntu-xenial-16.04-cloudimg" 
    vb.customize [ "modifyvm", :id, "--uart1", "0x3F8", "4" ] 
    vb.customize [ "modifyvm", :id, "--uartmode1", "file", File.join(Dir.pwd, "%s-console.log" % vb.name) ] 
    end 
end 

in modo da assicurarsi in Vagrantfile per ignorare questa proprietà

config.vm.provider "virtualbox" do |vb| 
    vb.name = "your specific project name" 

e modificare il vb.name essere unico per ognuno dei vostri progetti.

+0

domanda noob: come sei riuscito a visualizzare Vagrantfile di' ubuntu/xenial64'? – Jayesh

+4

in '~/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-xenial64/20160509.0.0/virtualbox/Vagrantfile' –

+1

Grazie - Ho semplicemente cancellato il vb.name hardcoded dal Vagrantfile della scatola e sono in grado di far ruotare più vagabondi istanze come al solito ora. – robo

2

Ho trovato che è più semplice modificare il Vagrantfile della scatola originale (che si trova ~/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-xenial64/<VERSTION>/virtualbox/Vagrant‌​file) anziché pensare a nomi di macchine virtuali univoci ogni volta.

lavoro di configurazione di Vagrantfile (scatola!):

include_vagrantfile = File.expand_path("../include/_Vagrantfile", __FILE__) 
load include_vagrantfile if File.exist?(include_vagrantfile) 

Vagrant.configure("2") do |config| 
    config.vm.base_mac = "0223C61ABA59" 
    config.ssh.username = "ubuntu" 
    config.ssh.password = "86f7d0e04910475d8789aa8f" 
    config.vm.synced_folder '.', '/vagrant', disabled: true 

    config.vm.provider "virtualbox" do |vb| 
    vb.customize [ "modifyvm", :id, "--uart1", "0x3F8", "4" ] 
    end 
end