49

Vagrantインスタンスを起動しようとすると、次のメッセージが表示されます。

Vagrant cannot forward the specified ports on this VM, since they
would collide with another VirtualBox virtual machine's forwarded
ports! The forwarded port to 4567 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.forward_port 80, 1234

VirtualBoxを開きましたが、現時点では実行中のボックスがないため、困惑しています。4567でリッスンしているプロセスを確認するにはどうすればよいですか?私のマシンで実行されているすべてのVagrantボックスを一覧表示する方法はありますか?

ありがとう、ケビン

4

15 に答える 15

69

を実行すると、マシンで実行されているvagrantインスタンスを確認できます。

$ vagrant global-status
id       name    provider   state   directory
----------------------------------------------------------------------
a20a0aa  default virtualbox saved   /Users/dude/Downloads/inst-MacOSX
64bc939  default virtualbox saved   /Users/dude/svn/dev-vms/ubuntu14
a94fb0a  default virtualbox running /Users/dude/svn/dev-vms/centos5

実行中のVMが表示されない場合、競合は(vagrantが認識している)vagrantボックスではありません。次に行うことは、VirtualBox UIを起動し、実行中のインスタンスがあるかどうかを確認することです。UIを実行したくない場合は、次のことができます。

ps -ef |grep VBox

VirtualBoxインスタンスを実行している場合は、それらをその出力に含める必要があります。出力にVirtualBoxを含むプロセスを強制終了できるはずです。1つの問題は、これらのプロセスの1つがキープアライブを実行するために存在しているように見えることです。最高のVirtualBoxプロセスを強制終了するだけです。VirtualBoxイメージを実行しているが、vagrantがそれを認識していない場合、一部のVagrantディレクトリが手動で削除されている可能性があります。これは、Vagrantがインスタンスを追跡できなくなることを意味します。

于 2013-06-01T19:13:47.390 に答える
23

Vagrantボックス/インスタンスを表示するときに使用されるのはVagrantfileだけではないことに注意してください。

あなたがこれを手に入れるとき:

~/dev/vagrant user$ vagrant reload
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 8001 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: 8001, 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.
~/dev/vagrant user$ 

実際には、〜/ dev / vagrantのVagrantfileだけでなく、通常は次の場所にある「box」配布.boxファイルのVagrantfileも使用しています。

~/.vagrant.d/boxes/trusty/0/virtualbox/Vagrantfile

そして、それを見ると、デフォルトのポートマッピングがたくさんあることがわかります。

$ cat ~/.vagrant.d/boxes//trusty/0/virtualbox/Vagrantfile
$script = <<SCRIPT
bzr branch lp:jujuredirector/quickstart /tmp/jujuredir
bash /tmp/jujuredir/setup-juju.sh
SCRIPT

Vagrant.configure("2") do |config|
  # This Vagrantfile is auto-generated by 'vagrant package' to contain
  # the MAC address of the box. Custom configuration should be placed in
  # the actual 'Vagrantfile' in this box.

  config.vm.base_mac = "080027DFD2C4"
  config.vm.network :forwarded_port, guest: 22, host: 2122, host_ip: "127.0.0.1"
  config.vm.network :forwarded_port, guest: 80, host: 6080, host_ip: "127.0.0.1"
  config.vm.network :forwarded_port, guest: 8001, host: 8001, host_ip: "127.0.0.1"
  config.vm.network "private_network", ip: "172.16.250.15"
  config.vm.provision "shell", inline: $script

end

# Load include vagrant file if it exists after the auto-generated
# so it can override any of the settings
include_vagrantfile = File.expand_path("../include/_Vagrantfile", __FILE__)
load include_vagrantfile if File.exist?(include_vagrantfile)

したがって、先に進み、このファイルを編集して、問題のある衝突転送ポートを削除します。

  config.vm.network :forwarded_port, guest: 22, host: 2122, host_ip: "127.0.0.1"
  config.vm.network :forwarded_port, guest: 80, host: 6080, host_ip: "127.0.0.1"
  # config.vm.network :forwarded_port, guest: 8001, host: 8001, host_ip: "127.0.0.1"

に:

~/dev/vagrant user$ cp ~/.vagrant.d/boxes//trusty/0/virtualbox/Vagrantfile ~/.vagrant.d/boxes//trusty/0/virtualbox/Vagrantfile.old
~/dev/vagrant user$ vi ~/.vagrant.d/boxes//trusty/0/virtualbox/Vagrantfile

他のVagrantfilesが含まれていることに注意してください。

include_vagrantfile = File.expand_path("../include/_Vagrantfile", __FILE__)

そして今、それは機能します:

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'trusty'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vagrant_default_1401234565101_12345
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 => 2122 (adapter 1)
    default: 80 => 6080 (adapter 1)
    default: 22 => 2222 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Home/user/dev/vagrant/vagrant-docker
==> default: Running provisioner: shell...
    default: Running: inline script
...

お役に立てれば。

于 2014-08-05T15:40:31.193 に答える
14

メッセージにあるように、ポートはホストボックスと衝突します。ホストマシンのポートを他の値に変更するだけです。したがって、エラーが発生した場合

config.vm.forward_port 80, 1234

それから私はそれをに変更します

config.vm.forward_port 80, 5656

1234が私のホストマシンで使用される可能性があるため。

実際に任意のマシンのポートを検査するには、tcpviewそのOSのユーティリティを使用して、どのポートがどこで使用されているかを確認します。

于 2012-06-14T17:05:13.940 に答える
8

私はこの問題に遭遇しました、そしてそれはRubyMineがまだポートを保持していることがわかりました。次のコマンドを実行して、どのアプリケーションがポート(私の場合は31337)を保持しているかを確認しました。

lsof -i | grep LISTEN 

出力

node       1396 richard.nienaber    7u  IPv4 0xffffff802808b320      0t0  TCP *:20559 (LISTEN)
Dropbox    1404 richard.nienaber   19u  IPv4 0xffffff8029736c20      0t0  TCP *:17500 (LISTEN)
Dropbox    1404 richard.nienaber   25u  IPv4 0xffffff8027870160      0t0  TCP localhost:26165 (LISTEN)
rubymine  11668 richard.nienaber   39u  IPv6 0xffffff8024d8e700      0t0  TCP *:26162 (LISTEN)
rubymine  11668 richard.nienaber   65u  IPv6 0xffffff8020c6e440      0t0  TCP *:31337 (LISTEN)
rubymine  11668 richard.nienaber  109u  IPv6 0xffffff8024d8df80      0t0  TCP localhost:6942 (LISTEN)
rubymine  11668 richard.nienaber  216u  IPv6 0xffffff8020c6ef80      0t0  TCP localhost:63342 (LISTEN)
于 2012-10-03T10:25:22.657 に答える
8

また、(少なくともVagrant 1.6.4では)、など~/.vagrant.d/data/fp-leasesの名前のファイルが含まれるフォルダーがあることにも注意してください。このフォルダーの内容を消去すると、今は役に立ちました。80808081

于 2014-11-03T08:30:34.010 に答える
4

Vagrant.configure( "2")do | config |

config.vm.network "forwarded_port"、ゲスト:80、ホスト:8080、

auto_correct: true

終わり

最後の:auto_correctパラメーターをtrueに設定すると、Vagrantに衝突を自動修正するように指示します。VagrantのアップまたはVagrantのリロード中に、Vagrantは衝突の検出と自動修正に関する情報を出力するため、注意を払い、それに応じて行動することができます。

https://www.vagrantup.com/docs/networking/forwarded_ports.html

于 2019-08-02T07:37:30.463 に答える
3

Proxifier(または同様のアプリ)を使用している場合は、最初にそれを閉じてみてください。これは、OSX10.9のProxifierが原因で発生した問題でした。

于 2014-09-10T21:44:09.683 に答える
1

私はそれをこのように修正しました:

  1. vagrant suspend
  2. RubyMineIDEでプロジェクトを閉じる
  3. vagrant resume
  4. RubyMineIDEで最近開く
于 2018-09-26T19:30:56.097 に答える
1

私の観察:ポート8000​​で実行されているプロセスがなかったため、基本的にポート転送は機能しませんでした。修正:フィルの答えは解決策を提供しました

~/.vagrant.d/boxes/ 

上記のパスには、ポート8000​​をリストした他のバージョンのvagrantファイルが含まれていました。以下のコマンドを使用してすべてをプルーニングすると、vagrantを正常に実行できました。

vagrant box remove [name] --all
于 2019-02-19T16:59:32.293 に答える
1

逃げ道:

  1. $ vagrant suspend
  2. $vagrant履歴書
于 2019-07-19T10:34:33.130 に答える
0

この問題が発生したのは、Postgresを実行しようとしているVMがあり、ポート5432のローカルマシンでPostgresを実行していたためです。

vagrant resume、エラーが発生しました:

Vagrantは、このVMで指定されたポートを転送できません。これは、これらのポートを既にリッスンしている他のアプリケーションと衝突するためです。5432に転送されたポートは、ホストマシンですでに使用されています。

ポート5432で実行されているものを探します。

o-ets-webdeveloper:portal me$ lsof -i :5432
COMMAND   PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
postgres 1389     me    5u  IPv6 0x681a62dc601cf1e3      0t0  TCP localhost:postgresql (LISTEN)
postgres 1389     me    6u  IPv4 0x681a62dc6499362b      0t0  TCP localhost:postgresql (LISTEN)

それはローカルのPostgresであることが判明し、これらのプロセスを強制終了することで、vagrant resume正常に実行できるようになりました。

于 2018-06-26T17:44:37.630 に答える
0

次のコマンドを含めて、現在のディレクトリ内のVagrantfileを変更する必要があります。

config.vm.network "forwarded_port", guest: 4567, host: <a port not used by your host machine>

Vagrant環境の設定とボックスの構成ファイルを含む隠しフォルダー(.vagrant.d /)もあることに注意してください。通常、このフォルダはホームディレクトリにあります。

例えば

~/.vagrant.d/boxes/<your_box_name>/0/virtualbox/Vagrantfile

通常、このファイルには、にある別のVagrantfileが含まれています。~/.vagrant.d/boxes/<your_box_name>/0/virtualbox/include/_Vagrantfile

このファイルもport-forwardingコマンドで変更する必要があります

于 2020-02-04T18:41:57.013 に答える
0

ホストがクラッシュした後

ホストマシンがクラッシュした後、この問題が発生しました(数週間前から機能していた構成で)。VMwareプロバイダーを使用しています。

問題

問題は明らかにこれでした(私はそれを100%理解していません):

  • VMwareには、クラッシュ前のVagrantVMの実行のポートマッピングがまだありました。これはIPへのマッピングでした192.166.157.131
  • Vagrantが起動すると、別のIPのマッピングを要求しました。それらは「使用中」であったため、取得できませんでした。Vagrant自体が同じVagrantボックスの前回の実行のマッピングを行っていたにもかかわらず、ポートが取得されたと報告しました。
  • Vagrant側で何をしても、ポートは解放されませんでした。

問題の原因(おそらく)

おそらく、私の問題の原因は私のネットワーク構成でした:

  • Vagrantが要求しconfig.vm.network "private_network", ip: 192.169.0.3、VMnet5を使用しました。
  • しかし、ポートマッピングはNATを使用します。これは、私のマシンではVMnet8です。

修理の試み1

VMnet5を手動で非アクティブ化し、Vagrantfileをリクエスト config.vm.network "private_network", ip: 192.169.157.131に変更しました。これは、必要なポートマッピングがすでにあるアドレスそのものです。(よりクリーンな解決策は、を介して動的IPを使用する config.vm.network "private_network", type: "dhcp"ことですが、それは私のセットアップには不便です。)

それは役に立たなかった。Vagrantはまだポートが利用できないと不平を言っていました。

修理の試み2

VMware Desktopでポートマッピングを削除しました([編集]-> [仮想ネットワークエディター])。

それは役に立ちませんでした(あなたはこれを信じますか?)。Vagrantはまだポートが利用できないと不平を言っていました。 netstat -ao実際、まだポートをLISTENINGとして報告しています。

報告されたプロセスを強制終了しました:14032 。ポートをリッスンとして報告しましたが、別のプロセスで報告しましたnetstat: そのプロセス13492を強制終了しました。ポートをリッスンとして報告しました。別のプロセスで報告しました: プロセス13340を強制終了 しました。プロセスIDを減らします。)
netstat

netstat

netstatポートがリッスンしていると報告しなくなりました。
Vagrantは、まだポートが利用できないとばかげて不平を言っていました。
netstatそのVagrantエラーメッセージの後でさえ、ポートがリッスンしていると報告しなくなりました。
は?
それらの港が占領されていた暗い過去の痕跡は今はないはずです!

修理の試み3

次に、ホストマシンを再起動して、最高のものを期待することを計画していました。しかし、これを行う前に、VMware Desktop GUIを閉じて、Vagrantを最後に試してみました。

そして、それはうまくいきました。

要点:明らかに、VMwareインフラストラクチャは構成を保持することがあります

  • 望むよりも密接に
  • また、独自のGUIの主張よりも厳密です。
于 2021-09-20T10:36:38.710 に答える
-1

ここで私の答えを参照してください:https ://superuser.com/a/1610804/1252585

コンテンツをもう一度書く:

すべてのLISTENINGポートを一覧表示するには:

$ netstat -a

次のコマンドを使用して、目的のポートで実行されているプロセスのプロセスIDを見つけます。

$ netstat -ano | findstr :8080

結果は次のように表示されます。

$ netstat -ano | findstr :5000
  TCP    0.0.0.0:5000           0.0.0.0:0              LISTENING       18024

ここで、18024はPIDまたはプロセスIDです。

次に、次のコマンドを使用して、ポスト8080のプロセスを強制終了します。

$ taskkill /PID 18024 /F

また$ taskkill //PID 18024 //F

結果は次のように表示されます。

$ taskkill //PID 18024 //F
SUCCESS: The process with PID 18024 has been terminated.
于 2020-12-18T02:49:22.070 に答える
-1

マシン上にすでに別のVagrantfileがあり、両方が同じポートを使用しているという理由だけで、新しいVagrantfileを開くだけで済みます。

ホストマシンのポートからマシン内の特定のポートにアクセスできるようにする転送ポートマッピングを作成します。以下の例では:

# accessing "localhost:8080" will access port 80 on the guest machine.
  config.vm.network "forwarded_port", guest: 3000, host: 3000
  config.vm.network "forwarded_port", guest: 3001, host: 3001
  config.vm.network "forwarded_port", guest: 8080, host: 8080
  config.vm.network "forwarded_port", guest: 5000, host: 5000
  config.vm.network "forwarded_port", guest: 5432, host: 5432 >>> old port 
  config.vm.network "forwarded_port", guest: 5432, host: 1234 >>> new port

ホストを5432から1234のようなものに変更するだけです。

于 2021-10-18T18:24:08.040 に答える