假设我制作了两个流浪盒,foo
和bar
:
$ mkdir -p foo bar
$ pushd foo; vagrant init hashicorp/precise32; vagrant up; popd
$ pushd bar; vagrant init hashicorp/precise32; vagrant up; popd
现在假设我在foo
上启动了一个HTTP服务器:
$ cd foo
$ vagrant ssh -c 'python -m SimpleHTTPServer 8080
我的问题是,如何让bar
与curl
进行沟通(例如通过foo
)?
$ cd bar
$ vagrant ssh -c 'curl http://????'
答案 0 :(得分:1)
虽然问题没有说清楚,但我认为这个较老的问题是:if the *same* development machine is running two vagrant instances, how can an app running on
foo fetch data from a url on
bar`。
如果是这样,我最近遇到了两个Rails应用程序(每个应用程序在同一个开发机器上的一个单独的vagrant实例中运行)。
foo
想要从bar
获取数据的两部分“技巧”是:
1)每个Vagrant文件都需要一行:
config.vm.network :private_network, ip: PVT_NETWORK
其中PVT_NETWORK是本地IP,每个Vagrant文件都不同,并且可能需要位于同一子网中。例如,PVT_NETWORK可能是192.168.50.50(foo)和192.168.50.51(bar)
2)foo
通过PVT_NETWORK IP地址访问bar
不您将在网络浏览器中使用的“真实”IP。
在我的Rails示例中,我还让每个应用程序在不同的端口上运行,因此foo
位于localhost:3000上,bar
位于localhost:3001上,因此foo
将访问bar
上的网址
http://192.168.50.51:3001/some_url
答案 1 :(得分:0)
如果两台服务器位于同一网络中且它们之间没有ACL(本地方框),则在配置网络后,它们可以相互通信。
配置vagrant文件:
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"