【Vagrant】VMホスト名の扱いについて

2024-09-18

前回Vagrant上で管理されているVM名とVagrantfileが格納されているフォルダ名が別であることに気づかずにスナップショット作成に失敗した事例を紹介しました。

今回はVagrantを使う上でのVMのホスト名関連についてまとめたいと思います。
私が調べた限り、Vagrantfile上では下記3種類のホスト名を定義する箇所がありました。

  • Vagrant上で管理されるホスト名
  • Virtualbox上で管理されるホスト名
  • OS上のホスト名(通常の名前解決で使われるもの)

Vagrant上で管理されるホスト名

vagrant up や vagrant status など主にvagrantコマンドで対象VMを操作する際に利用されます。前回のスナップショット作成の際にも必要でした。
Vagrantfile上で下記のように定義します。

config.vm.define 'VM名' do |host|
・
・
end

Virtualbox上で管理されるホスト名

下記画像のようにVirtualboxのGUI上に表示されるホスト名です。

Vagrantfile上で下記のように定義します。

host.vm.provider "virtualbox" do |vb|
      vb.name = "VM名"
end

OS上のホスト名(通常の名前解決で使われるもの)

TeraTermを利用したSSH接続の際などに使用する通常のホスト名です。
Vagrantのプラグイン vagrant-hostmanager を使うことでホストOS内、ゲストOS内で名前解決ができます。
Vagrantfile上で下記のように定義します。

config.vm.hostname = "ctest7"

Vagrantfileの記載例

部分部分だと分かりづらいので、例として私が作成したVagrantfileを公開します。
これをご参考にいろいろカスタマイズしてください。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.hostmanager.enabled = true
  config.hostmanager.manage_host = true
  config.vm.define 'ctest7' do |host|
    host.vm.hostname = "ctest7"
    host.vm.box = "centos/7"
    host.vm.network "private_network", ip: "192.168.33.11"
    host.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--memory", "2048"]
      vb.name = "ctest7"
    end
  end
end

※尚、5行目、6行目のvagrant-hostmanagerの定義箇所を「config.vm.define 'ctest7’ do |host|」内に記述すると何故かホストOS上のhostsファイルへの書き込み処理が走りませんでした。

Vagrant

Posted by pike