Vagrant のNAT でポートフォワーディングするときのhost_ip: 指定について

投稿者: | 2017/05/01

職場でVagrant(with VirtualBox)を使ってLinux 仮想マシンを構築する際、Vagrantfile のポートフォワーディング設定でハマったのでメモ。

環境

  • ホストOS: Windows 7 Professional
  • Vagrant: 1.9.3
  • VirtualBox: 5.1.22
  • vagrant box: Ubuntu 16.04 = ubuntu/xenial64, CentOS 6.8 = bento/centos-6.8 *01両方試しました

host_ip: ‘127.0.0.1’ を指定しないとvagrant up でコケる

まず、host_ip: 指定なしでforwarded_port 指定すると、vagrant up が通りません。
なんでや…。

# これはダメ
config.vm.network "forwarded_port", guest: 80, host: 8080, id: 'HTTP'

で、host_ip: パラメータにローカルホストを示す’127.0.0.1′ を指定するとvagrant up が通る様になりました。

# これでvagrant up は通るように...
config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: '127.0.0.1', id: 'HTTP'

host_ip: ‘127.0.0.1’ を指定すると外部から仮想マシンに接続できない

vagrant up が通る様になってめでたしx2 と思いきや。
外部からポートフォワーディングを通して仮想マシンに接続する事ができません。

つまりhttp://localhost:8080 なら接続できるのに、http://dns_name:8080 は通らない状態。

vagrant up 後、VirtualBox の設定でNAT のポートフォワーディングを開いてホストIP(127.0.0.1)を削除してしまえば良いのですが、それだとvagrant up やらreload やらする都度、ホストIP を消さねばなりません。

host_ip: ‘empty’ で解決

host_ip: ‘empty’ を指定してやることで問題解決しました。
まさかの英単語文字列指定。

# これでvagrant up を通るし、外部からの接続もOK!
config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: 'empty', id: 'HTTP'

こんなん、ドキュメント見て「ひょっとして…」と思わんかったら気付かんですよ。
もうちょっと直截な表記しておこうや。

https://www.vagrantup.com/docs/networking/forwarded_ports.html#options-reference

脚注   [ + ]

01. 両方試しました

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータがどう処理されているか知りたい方はこちらをお読みください