如何从另一个VirtualBox虚拟机中访问Vagrant客户机?

14
场景是我的开发环境在笔记本电脑(主机)上的 Vagrant box 中,我想在虚拟机中进行浏览器测试,因此需要从一个 vm 看到另一个 vm。
Vagrant box 的端口为 8080,已转发到主机的同一端口:8080。因此,我可以在主机上使用 localhost:8080 查看服务器。
我应该使用哪个地址来进行浏览器测试 vm?
测试 vm 的默认网关? Vagrant vm 的 IP? 主机的虚拟网络 IP?
并且我应该在浏览器测试 vm 上使用 NAT 或 host-only 适配器?
这造成了许多组合,我相信我尝试过所有组合。我还需要了解什么?
5个回答

16
在你的使用情况下,你应该使用桥接网络(Vagrant中的公共网络)。如果虚拟机位于同一主机上,您甚至可以使用内部网络(Vagrant中的私有网络)。
如果使用公共网络,虚拟机的第二个网卡将能够从您网络中的DHCP服务器(例如您的家庭路由器)获取IP地址。
只需在Vagrantfile中添加以下代码块,然后执行vagrant reload即可。
Vagrant.configure("2") do |config|
  config.vm.network "public_network"
end
你可以通过使用vagrant sshifconfig/ip addr show命令来获取IP地址。

4
如果您和我一样不想使用 public_network,那么您应该按照以下步骤使用 private_network
  1. 从项目根目录打开 Vagrantfile
  2. 搜索 config.vm.network
  3. 添加此行 config.vm.network "private_network", ip: "192.168.33.10"。请注意,这不是您基础机器的 IP 地址,而是虚拟机器的 IP 地址,您的机器 IP 应该不同。您可以将其视为假 IP 地址,因此将其更改为其他任何内容,例如 192.168.30.20
  4. 使用 vagrant reload 重新加载您的 Vagrant。
  5. 现在转到您的另一个虚拟客户端,对我而言它是 Windows Guest 2。我的基础是 Linux Mint,Vagrant 方案在 Ubuntu Guest 1 上。以管理员身份打开 C:\Windows\System32\drivers\etc\hosts 文件,并在其中进行上述 IP 输入,例如: 192.168.33.10 local.youralias.com。保存文件后,您现在可以在 http://local.youralias.com/ 中浏览网站了。
  6. 如果您的 Guest 2 也是 Linux,请编辑此文件 sudo vi /etc/hosts,并在文件顶部添加此行 192.168.33.10 local.youralias.com。现在保存并退出,即可浏览 URL :)

享受吧!祝你编码愉快。


1

除了接受的答案之外,您实际上可以设置IP并指定要使用的网络接口。

我在Linux桌面通过WiFi和静态IP进行设置: 您可以通过运行ifconfig命令找到您的WiFi接口名称。

Vagrant.configure("2") do |config|
    config.vm.network "public_network", :bridge => 'wlp8s0', ip: "192.168.1.199"
end

1
这可能有许多来源原因。在我的情况下,我使用 Vagrant Fedora Box。我尝试过:
  • First using the private_network that I attached to a host only adapter and launched httpd service to test the connection between guest and host

    config.vm.network "private_network", type: "dhcp", name: "vboxnet2"
    config.vm.network "forwarded_port", guest:80, host:7070
    

但我无法从主机ping通我的虚拟机,也无法telnet到开放的httpd服务。

  • Second using public_network and launched httpd service to test connectivity

    config.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)", use_dhcp_assigned_default_route: true
    
我可以从我的主机ping通我的客户端,但我无法telnet到httpd服务。
对于这两种用例,问题在于fedora客户端主机上的80端口被防火墙阻止了。以下是解决问题并使私有网络和公共网络都正常工作的方法:
   firewall-cmd --permanent --add-port 80/tcp  #open the port permanently
   firewall-cmd --zone=public --permanent --add-service=http 
   firewall-cmd --list-port  # list to check if the port was opened   
   systemctl stop firewalld   # stop and open the firewall service
   systemctl start firewalld

0

旧问题,新答案:[免责声明:我不是一个vagrant专家]

两种解决方案都可能有效,但“vagrant思维方式”的解决方案是,在您的客户端中的某个组件(rinetd?)应将任何未知端口的请求转发到主机。从主机中,请求可以通过vagrant端口转发映射到在另一个客户端中运行的服务。

所以,总结一下:

1.在guest-1中我们做localhost:1234。Guest-1将检测到此端口不可用并转发到主机 2.主机将检查vagrant端口转发并转发到guest-2 3.在guest-2中,我们有一些很好的服务监听post 1234 4.完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接