LoginSignup
16
11

More than 5 years have passed since last update.

Vagrantのおけるポートフォワーディングではまった

Last updated at Posted at 2018-03-14

Oracle VM VirtualBox Manager 5.2.8

Vagrantのポートフォワーディング

簡単に言えば、ホスト(例えば自分のPC)から、ゲスト(ここではVagrantで作った仮想環境)で立ち上げたアプリにアクセスするために使用します。

仮想環境の立ち上げ方などは検索すればたくさん出てくるので省略しますが、下記のような設定を追加して、ポートフォワーディングを可能な設定にします。必要に応じて、vagrant up or vagrant reloadをします。

Vagrantfile
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をすると、解決しました。

16
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
11