我正在使用Vagrant 1.7.2
和VMware Workstation 11.1.2
与插件vagrant-vmware-workstation 3.2.9
。我的主机是Windows 8,我的客人是Ubuntu 12.04.1 LTS(虽然我尝试了多个不同的客人机箱)。
我完全遵循了入门指示,这意味着我现在有一个看起来像这样的Vagrant文件:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
config.vm.provision :shell, path: "bootstrap.sh"
config.vm.network :forwarded_port, host: 4567, guest: 80
end
并且bootstrap.sh:
#!/usr/bin/env bash
apt-get update
apt-get install -y curl
apt-get install -y apache2
if ! [ -L /var/www ]; then
rm -rf /var/www
ln -fs /vagrant /var/www
fi
该框启动时没有任何问题,我可以通过vagrant ssh
连接到它并确认一切正常。启动时,端口似乎正在转发:
==> default: Checking if box 'hashicorp/precise64' is up to date...
==> default: Verifying vmnet devices are healthy...
==> default: Preparing network adapters...
==> default: Starting the VMware VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 192.168.131.128:22
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Forwarding ports...
default: -- 80 => 4567
default: -- 22 => 2222
==> default: Configuring network adapters within the VM...
==> default: Waiting for HGFS kernel module to load...
==> default: Enabling and configuring shared folders...
default: -- C:/Vhosts/vagrant_getting_started: /vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: to force provisioning. Provisioners marked to run always will still run.
我可以从主机浏览到http://192.168.131.128/
并查看目录索引。但是,当我尝试浏览http://localhost:4567/
时,我会得到一个ERR_CONNECTION_REFUSED
的空白页。
来自访客,curl -v 'http://localhost:80/'
给了我预期的200 OK响应和html。
主持人curl -v 'http://localhost:4567/'
拒绝连接:
* Trying ::1...
* Trying 127.0.0.1...
* connect to ::1 port 4567 failed: Connection refused
* connect to 127.0.0.1 port 4567 failed: Connection refused
* Failed to connect to localhost port 4567: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 4567: Connection refused
我发现很多帖子都说要检查卷曲结果,但没有任何帖子表明如果不正确会怎么做。
随机的东西我试图让它工作:
auto_correct: true
添加到转发的端口。 更新
我在Edit&gt;中手动添加了VMware工作站中的端口转发功能。 <虚拟网络编辑器&gt; NAT。这符合要求,我现在可以在http://localhost:4567/
查看目录列表。但是,我不希望每次制作新机器或机器的IP地址发生变化时都要手动执行此操作。我想管理来自vagrant的端口转发,因为我将控制这个项目的版本。
更新x2 在VMware中设置端口转发不是一个可行的解决方案。下次重新加载这个盒子时,Vagrant会因为它已经在使用而抱怨端口冲突。
更新x3:进展!
我跑了流浪汉 - 调试并密切关注端口转发部分。我注意到它正在写入Windows NAT配置文件并找到该文件所在的位置。转发端口(现在为8080
)在调试输出中和文件本身中都没有提到。如果我手动添加端口转发,它会出现在文件中。以下是两者之间的区别:https://www.diffchecker.com/qoazuggp
现在这个大问题...... 为什么字符串中的转发端口没有保存到NAT配置?
令人沮丧的是:它最初起作用了。我的主机上的某些已更改,我不知道是什么。我在第一个之后配置了两个vms。一台计算机使用PuPHPet默认设置创建,另一台计算机包含在zf-apigility-skeleton中。我注意到端口转发在此之后停止工作,但完全删除所有内容并重新开始并没有修复它。