Oracle VM VirtualBox Manager 5.2.8
#Vagrantのポートフォワーディング
簡単に言えば、ホスト(例えば自分のPC)から、ゲスト(ここではVagrantで作った仮想環境)で立ち上げたアプリにアクセスするために使用します。
仮想環境の立ち上げ方などは検索すればたくさん出てくるので省略しますが、下記のような設定を追加して、ポートフォワーディングを可能な設定にします。必要に応じて、vagrant up
or vagrant reload
をします。
config.vm.network :forwarded_port, guest: 8000, host: 8000
その後、ゲスト(仮想環境)にて、ポート8000を使用するアプリ(例えばnginx)を立ち上げると、ホストのブラウザなどから http://localhost:8000 と入力することで、ゲストのアプリにアクセスできるようになります。
参考:Vagrant + VirtualBoxで仮想環境側のポートをあける
#はまったこと
初回起動時にはうまく接続できたのですが、ゲストにてアプリを立ち上げようとすると、アプリが起動できない。
The port is already in useのような表示がされて、起動に失敗します。lsof -i:8000
で確認すると、確かに使用されています。ステータスはTCP listenとかです。開いているのはいいんだけど、なぜアプリが起動できない。Why?
ちなみに、vagrant up
自体ができない原因は、すでにホストでそのポートが使用されているからなので、lsof
などでPIDを調べて、killするか、そもそもvagrantfileの設定を変えましょう。auto_correct: true
を追加しても良いかもしれません。そのときは、ホストでvagrant port
とやって、対応ポート番号を確認したりする必要があるかもしれませんが。
参考:ポートフォワードにより仮想マシン内のサーバにアクセスする
脱線しましたが、今回私がはまったのはこれではありません。検索してもあまり出てこなかったので、記事にしました(そもそもはまらないのかもしれませんが。。)。
#原因
vagrantを停止するときに、vagrant suspend
で停止していたためです。この場合、ホストをShutdown、再起動しても、vagrantの状態は vagrant saved
とかでのままで、vagrant up
しても、ゲスト側でアプリを同じポートが使用中のステータスで保存され、同じポートを使えません。そのほか、いろいろ保存されたままになるようです。メモリとかも圧迫するみたい。詳しくはドキュメント見てください。
#解決
vagrant halt
をしてから、vagrant up
をすると、解決しました。