如何找到Vagrant IP?

时间:2013-02-14 08:49:06

标签: capistrano vagrant

我一直在使用Capistrano开发自动部署,并使用Vagrant作为我的测试虚拟服务器。

问题是,我需要将Vagrant的IP“ssh加入其中”。

我尝试了ifconfig并获得了IP,但看起来它并不是确切的流浪IP。

有人可以帮助我获得Vagrant IP吗?

13 个答案:

答案 0 :(得分:41)

默认情况下,流浪者框没有任何IP地址。要查找IP地址,只需在Vagrantfile中分配IP地址,然后拨打vagrant reload

如果您只需要从主机访问一个流浪汉机器,那么建立一个专用网络"是你所需要的全部。在默认Vagrantfile中取消注释相应的行,或添加此代码段。如果您希望VM显示在172.30.1.5,则会出现以下情况:

config.vm.network "private_network", ip: "172.30.1.5"

详细了解专用网络。 https://www.vagrantup.com/docs/networking/private_network.html

如果您需要在主机外部访问vagrant,例如针对iOS或Android等移动设备进行开发,则必须启用可以使用静态IP的公共网络,例如192.168.1.10或者DHCP。

config.vm.network "public_network", ip: "192.168.1.10"

详细了解如何配置公共网络https://www.vagrantup.com/docs/networking/public_network.html

答案 1 :(得分:34)

我发现我需要IP才能在主机系统上配置/etc/hosts以指向新VM上的服务。

这是我用来获取IP的粗略版本。让Vagrant做其SSH魔术并向VM询问其地址;调整你的需求。

new_ip=$(vagrant ssh -c "ip address show eth0 | grep 'inet ' | sed -e 's/^.*inet //' -e 's/\/.*$//'")

我刚在Vagrant Docs找到了这个。看起来他们认为这是一种有效的方法:

  

这将自动从保留地址分配IP地址   空间。可以通过使用vagrant ssh到SSH来确定IP地址   进入机器并使用适当的命令行工具查找   IP,例如ifconfig。

答案 2 :(得分:20)

运行:

vagrant ssh-config > .ssh.config

然后在config/deploy.rb

role :web, "default"     
role :app, "default"
set :use_sudo, true
set :user, 'root'
set :run_method, :sudo

# Must be set for the password prompt from git to work
default_run_options[:pty] = true
ssh_options[:forward_agent] = true
ssh_options[:config] = '.ssh.config'

答案 3 :(得分:14)

' ave开发了一个小的 vagrant-address 插件。它是简单的,跨平台的,跨提供者的,不需要编写脚本。

https://github.com/mkuzmin/vagrant-address

答案 4 :(得分:13)

打开终端,来到你的Vagrantfile的路径并写下这个

(Linux)的 vagrant ssh -c“hostname -I | cut -d'' - f2”2> / dev / null

(OS X) vagrant ssh -c“hostname -I | cut -d''-f2”2> / dev / null | pbcopy

Linux的命令也适用于Windows。对不起,我无法测试。

来源:https://coderwall.com/p/etzdmq/get-vagrant-box-guest-ip-from-host

答案 5 :(得分:9)

在终端类型中:

ip addr show

答案 6 :(得分:5)

我在VagrantFile做过:

REMOTE_IP = %x{/usr/local/bin/vagrant ssh-config | /bin/grep -i HostName | /usr/bin/cut -d\' \' -f4}
run "ping #{REMOTE_IP}"

如您所见,我使用了"%x {}"红宝石功能。

答案 7 :(得分:2)

终止以vagrant ssh打开的连接将显示地址,因此可以执行虚拟或空命令:

$ vagrant ssh -c ''
Connection to 192.168.121.155 closed.

答案 8 :(得分:0)

我需要知道这一点,告诉用户将什么添加到他们的主机的主机文件中。 只使用bash,这对我来说是流浪汉:

external_ip=$(cat /vagrant/config.yml | grep vagrant_ip | cut -d' ' -f2 | xargs)
echo -e "# Add this line to your host file:\n${external_ip}     host.vagrant.vm"

答案 9 :(得分:0)

因为我还没有在这里看到它……当您vagrant ssh进入包装盒时,我意识到它实际上是在告诉您接口的IP地址。你可以到那里。例如。

 {~/Documents/jupyterhub-ansible} (features *%)$  vagrant ssh
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-50-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Wed May 22 12:00:34 UTC 2019

  System load:  0.12              Processes:             101
  Usage of /:   56.5% of 9.63GB   Users logged in:       0
  Memory usage: 19%               IP address for enp0s3: 10.0.2.15
  Swap usage:   0%                IP address for enp0s8: 192.168.33.10


10 packages can be updated.
1 update is a security update.


Last login: Wed May 22 12:00:04 2019 from 192.168.33.1
vagrant@ubuntu-bionic:~$ 

在我的流浪汉文件中,我分配了这样的地址:

config.vm.network "private_network", ip: "192.168.33.10"

如您所见, IP address for enp0s8: 192.168.33.10

答案 10 :(得分:0)

我们正在使用VirtualBox作为提供者,对于虚拟盒子,您可以使用VBoxManage来获取IP地址

VBoxManage guestproperty get <virtual-box-machine-name> /VirtualBox/GuestInfo/Net/1/V4/IP

答案 11 :(得分:0)

我遇到了这样的事情,所以我在 Vagrant 框中添加了 run bash 脚本,并在主机文件夹中输出公共 IP 地址文件。

<块引用>

在 Vagrantfile 中添加这个

...
  config.vm.provision "shell", path: "public-ip.sh"
  config.vm.synced_folder '.', '/vagrant'
...

<块引用>

在同一个 Vagrantfile 文件夹中创建 bash 脚本名称 public-ip.sh


#!/bin/bash 

# change eth1 to your desired network interface, in my vagrantfile i have first NAT and second is bridge dhcp network and i want to know random dhcp IP.

box_ip=$(ip address show eth1 | grep 'inet ' | sed -e 's/^.*inet //' -e 's/\/.*$//')" 

echo "$box_ip" | tee public_ip.txt

echo "add box ip to your host machine /etc/hosts entry so you can connect the box using box hostname"


当您执行 vagrant up 时,您将看到用于公共 ip 或私有 ip 的框的 vagrant 输出,并且您可以在框的任何时候将其添加到主机入口

答案 12 :(得分:-2)

我知道这篇文章已经过时了,但我想为此添加几点!

你可以尝试

  package com.webom.practice;

  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  import org.json.JSONArray;
   import org.json.JSONException; 
   import org.json.JSONObject;

public class Sample {

    public static Map<String, Object> jsonToMap(JSONObject json) throws JSONException {
        Map<String, Object> retMap = new HashMap<String, Object>();

        if(json != JSONObject.NULL) {
            retMap = toMap(json);
        }
        return retMap;
    }

    public static Map<String, Object> toMap(JSONObject object) throws JSONException {
        Map<String, Object> map = new HashMap<String, Object>();

        Iterator<String> keysItr = object.keys();
        while(keysItr.hasNext()) {
            String key = keysItr.next();
            Object value = object.get(key);

            if(value instanceof JSONArray) {
                value = toList((JSONArray) value);
            }

            else if(value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            map.put(key, value);
        }
        return map;
    }
    public static List<Object> toList(JSONArray array) throws JSONException {
        List<Object> list = new ArrayList<Object>();
        for(int i = 0; i < array.length(); i++) {
            Object value = array.get(i);
            if(value instanceof JSONArray) {
                value = toList((JSONArray) value);
            }

            else if(value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            list.add(value);
        }
        return list;
    }
public static void main(String[]args) {
    String Jsondata="{\r\n" + 
            "  \"enabled\":true,\r\n" + 
            "  \"contentMetadataPartial\":\r\n" + 
            "  {\r\n" + 
            "     \"customTags\":\r\n" + 
            "     {\r\n" + 
            "        \"tag1\":\"value1\"\r\n" + 
            "     }\r\n" + 
            "  },\r\n" + 
            "  \"simulatedChanges\":\r\n" + 
            "  [\r\n" + 
            "     3000,\r\n" + 
            "     2500,\r\n" + 
            "     400\r\n" + 
            "  ],\r\n" + 
            "  \"simulatedUpdateMetadata\":\r\n" + 
            "  [\r\n" + 
            "     {\r\n" + 
            "        \"customTags\":\r\n" + 
            "        {\r\n" + 
            "           \"tag1\":\"value1\",\r\n" + 
            "        },\r\n" + 
            "        \"assetName\":\"asset1234\",\r\n" + 
            "     },\r\n" + 
            "     {\r\n" + 
            "        \"duration\":1111,\r\n" + 
            "        \"encodedRate\":3333,\r\n" + 
            "     }\r\n" + 
            "  ]\r\n" + 
            "}\r\n" ;
     JSONObject json = new JSONObject(Jsondata);
     System.out.println(json);
Map<String,Object> dataConversion=Sample.jsonToMap(json);
System.out.println(dataConversion);
}
}

如果您单独为客人设置了名称,这将很容易!