最近、Vagrantネタばっかりですね。まあいいですけど。
Vagrant 1.8.5とVirtualBox 5.1.4で次のようなVagrantfileで二つ目の仮想マシンを起動しようとするとちょっと困ったことになります。
#Ubuntu Xenial config.vm.define :xenial1 do |xenial1| xenial1.vm.box = "xenial" xenial1.vm.hostname = "xenial1" xenial1.vm.network "private_network", ip: "192.168.0.220" end config.vm.define :xenial2 do |xenial2| xenial2.vm.box = "xenial" xenial2.vm.hostname = "xenial2" xenial2.vm.network "private_network", ip: "192.168.0.221" end
起動!
# vagrant up xenial1 xenial2
残念ながらこんなエラーが出て起動しませんでした。
==> xenial2: Importing base box 'xenial'... ==> xenial2: Matching MAC address for NAT networking... A VirtualBox machine with the name 'ubuntu-xenial-16.04-cloudimg' already exists. Please use another name or delete the machine with the existing name, and try again.
Trustyのイメージはこの設定だけでも想定通り動いたのですが、Xenialのイメージはなんか変みたいです。 エラーでググると次のような情報を発見。
つまり、次のように設定ごとにvb.nameを書いてあげると、同じboxで複数のUbuntu Xenial(16.04)を起動できるようです。本来は起動した時に自動的に「Vagrantfileが配置されたフォルダ名+config.vm.define
のところに書いた名前」に書き変わるのですが、Xenialの公式イメージだとその変更がうまくいかないので、一意な名前に手動で書き換えてあげる必要があるようです。
config.vm.define :xenial3 do |xenial3| config.vm.provider "virtualbox" do |vb| ←追記 vb.name = "xenial3" ←追記 end ←追記 xenial3.vm.box = "xenial" xenial3.vm.hostname = "xenial3" xenial3.vm.network "private_network", ip: "192.168.0.222" end
同じような設定でxenial1-xenial3を作って、vagrant up xenial1 xenial2 xenial3
と実行したところ、3つとも仮想マシンが作られて起動したことを確認しています。