我一直在使用Capistrano开发自动部署,并使用Vagrant作为我的测试虚拟服务器。
问题是,我需要将Vagrant的IP“ssh
加入其中”。
我尝试了ifconfig
并获得了IP,但看起来它并不是确切的流浪IP。
有人可以帮助我获得Vagrant IP吗?
答案 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 插件。它是简单的,跨平台的,跨提供者的,不需要编写脚本。
答案 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);
}
}
如果您单独为客人设置了名称,这将很容易!