4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vagrantでポート番号が衝突したときの対処法(Windows)

Last updated at Posted at 2017-03-24

概要

Vagrantを起動する際にポート番号が他のアプリケーションが使っているためエラーになることがあります。
結論としては、Vagrantで別のポート番号を割り当てればよいのですが、
日ごろWindowsで開発していて、ポート番号を初めて調べたので備忘録のために手順を残します。

現象

vagrant up時に以下のようなエラーが表示される。

Vagrant cannot forward the specified ports on this VM, since they
would collide with some other application that is already listening
on these ports. The forwarded port to 3333 is already in use
on the host machine.
To fix this, modify your current projects Vagrantfile to use another
port. Example, where ‘1234’ would be replaced by a unique host port:

config.vm.network :forwarded_port, guest: 22, host: 1234

Sometimes, Vagrant will attempt to auto-correct this for you. In this
case, Vagrant was unable to. This is usually because the guest machine
is in a state which doesn’t allow modifying port forwarding.

1. Windowsでportをどのアプリケーションが使用しているか調査。

// Windowsコマンドプロンプトを起動してnetstatコマンドで調査
> netstat -nao
TCP         127.0.0.1:3333         0.0.0.0:0              LISTENING       XXX // <-PID
...

2. WindowsタスクマネージャでPID XXXのアプリケーションを調べる。

[タスクマネージャ起動]->[詳細]で調べる

3. Vagrantのポート番号を変更する。

Vagrantfileを開き、以下のような記述があるところを修正すれば良いです。

xxxx.vm.network :forwarded_port, guest: 22, host: 3333, id: "ssh", auto_correct: false

しかし、何番にするのがベストなのか、気になったので調べました。
https://ja.wikipedia.org/wiki/TCPやUDPにおけるポート番号の一覧

49151番までは登録済みポート番号とのことで、一見すると49152番以降だと安全そうですが、
49152番以降はOSのエフェメラルポートとして自動的に割り当てられる可能性があるようです。(OSにもよるのでしょうが。)
そうなると逆にバッティングしそうなので、何か別のポートがいいかもしれません。

3333が既に競合しているというだけなので、2223とかにして様子を見ようかな…。

2017/04/06 追記
auto_correctという機能があるらしく、ポート番号が重複した場合に自動的に別のポートを割り当てるようです。

xxxx.vm.network :forwarded_port, guest: 22, host: 3333, id: "ssh", auto_correct: true

例えばポート番号3333で2つのvagrantを起動すると、以下のように自動的に2200番を割り当てます。

Bringing machine 'xxx' up with 'virtualbox' provider...
==> api: Checking if box 'hogehogehoge' is up to date...
==> api: Fixed port collision for 22 => 3333. Now on port 2200.
==> api: Clearing any previously set network interfaces...
==> api: Preparing network interfaces based on configuration...
    api: Adapter 1: nat
    api: Adapter 2: hostonly
==> api: Forwarding ports...
    api: 22 (guest) => 2200 (host) (adapter 1)
    api: 80 (guest) => 8808 (host) (adapter 1)
    api: 443 (guest) => 14438 (host) (adapter 1)
    api: 8000 (guest) => 18000 (host) (adapter 1)
    api: 3306 (guest) => 23306 (host) (adapter 1)
==> api: Running 'pre-boot' VM customizations...
...

まとめ

  • Windowsでポート番号調べるときにはnetstat -naoを使う。
  • エフェメラルポートというものがある。
  • ポート番号には絶対に衝突しないという選択肢はなさそう。
  • auto_correct: trueにすると、ポート番号が衝突した場合に自動的に別のポートを割り当てることができる。

2017/04/06 追記
※指摘を受けて修正しました。フィードバックありがとうございます。

4
8
2

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
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?