如何访问虚拟机里的虚拟机里的虚拟机里的....-阿里云开发者社区

开发者社区> edwardsbean> 正文

如何访问虚拟机里的虚拟机里的虚拟机里的....

简介: <div> <div style="line-height:1.6; orphans:2; widows:2; font-size:14px; font-family:'Helvetica Neue',Arial,'Hiragino Sans GB',STHeiti,SimSun,'WenQuanYi Micro Hei','Microsoft YaHei',sans-serif">
+关注继续查看


如何访问虚拟机里的虚拟机里的虚拟机里的....

起源

题目有点夸大了,其实就是访问虚拟机里的docker虚拟机。但是道理和访问虚拟机里的虚拟机里的虚拟机里的...是一样的你懂的。

最近在研究spark和docker,利用docker搭建了个分布式spark环境。我本机是windows,开了一台虚拟机centos跑docker及spark.

一般情况下

由于docker虚拟出来的网段是172.17.0.x,我windows主机肯定访问不了。但我可以访问master:

docker run -p 7077:7077 -p 8080:8080 -v /opt/CDH/spark-0.9.1-bin-cdh4/:/opt/spark spark-test-mas
ter

将docker的端口映射成虚拟机的ip端口。

难以忍受的是

192.168.152.131是我的虚拟机centos的ip,当我要访问多个workers的时候,为了避免端口冲突,必须修改对应的映射ip,比如192.168.152.131:8081,192.168.152.131:8082,但是这样就没办法通过192.168.152.131:8080主页直接访问其他worker的web页面。

懒惰的人要解决这些问题

我们分析一下

我虚拟机用的是NAT方式连接。vmware会在windows主机虚拟一个vm8网卡,作为NAT,let's see:

以太网适配器 VMware Network Adapter VMnet8:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::98a3:2540:507c:c401%20
   IPv4 地址 . . . . . . . . . . . . : 192.168.152.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

centos虚拟机的ip:

eth0      Link encap:Ethernet  HWaddr 00:0C:29:69:19:94  
          inet addr:192.168.152.131  Bcast:192.168.152.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:95126 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37664 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:121109914 (115.4 MiB)  TX bytes:4068705 (3.8 MiB)

docker虚拟的网卡:

docker0   Link encap:Ethernet  HWaddr FE:54:65:6F:81:5C  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12802 errors:0 dropped:0 overruns:0 frame:0
          TX packets:38684 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1516399 (1.4 MiB)  TX bytes:56376971 (53.7 MiB)

docker container的各个ip:

spark-master=172.17.0.2spark-woker=172.17.0.3spark-woker=172.17.0.4spark-worker=172.17.0.5

解决办法

完整的路由:
本机->虚拟网卡(192.168.152.1)->linux虚拟机ip(192.168.152.131) ->linux虚拟机里的虚拟网卡(172.17.41.1)->linux虚拟机里的虚拟机(172.17.0.2)

所以添加一条路由就好了:

route add -p 172.17.0.0 mask 255.255.255.0 192.168.152.131

跟踪一下看:

C:\Users\Administrator>tracert 172.17.0.2
通过最多 30 个跃点跟踪到 172.17.0.2 的路由
  1    <1 毫秒   <1 毫秒   <1 毫秒 192.168.152.131
  2    <1 毫秒   <1 毫秒   <1 毫秒 172.17.0.2
跟踪完成。

插曲

由于校园网也是172.17.0.0网段的,会有网关冲突。路由表也有优先级,一开始设置的添加路由之后,走的居然是校园网的那条。问了大神,大神说一般是优先走明细路由。我这边明显不一样。最后是这样:

route delete 0.0.0.0

不能上网了0..0

route add -p 172.17.0.0 mask 255.255.255.0 192.168.152.131

重新添加校园网的网关,两边都ok了。

Reference

http://tonyguo.blog.51cto.com/379574/176104


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
虚拟机里访问U-DISK方法
$mount  /dev/sdb  /mnt/usb $mount -t vfat /dev/sdb/  /mnt/usb
481 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
2897 0
虚拟机在java堆中对象分配、布局和访问的过程
java虚拟机读书笔记 对象的分配、布局、访问
856 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9437 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5731 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
470 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
3862 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
3264 0
+关注
98
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载