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

简介: <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


目录
相关文章
|
7月前
|
存储 缓存 固态存储
VSAN存储故障导致虚拟机无法访问的VSAN数据恢复案例
VSAN数据恢复环境: 由四台某品牌服务器组建的VSAN集群,每台节点服务器上有两个磁盘组。每个磁盘组中有1块SSD硬盘+5块SAS硬盘,SSD作为闪存,SAS硬盘作为容量盘。 VSAN故障: VSAN集群中一个节点服务器上其中一个磁盘组中的容量盘出现故障离线,VSAN开始数据的重构迁移,数据迁移还没有完成的时候机房停电导致数据迁移中断。来电后启动所有设备后,管理员发现另一个磁盘组中的两块容量盘出现故障离线,VSAN数据存储出现问题。VSAN管理控制台可以登录,但是所有虚拟机都无法访问。
|
Linux 应用服务中间件 虚拟化
Linux系列——VMware虚拟机配置端口转发(端口映射),实现远程访问
Linux系列——VMware虚拟机配置端口转发(端口映射),实现远程访问
|
4月前
|
应用服务中间件 nginx Docker
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
|
4月前
|
虚拟化
vmware虚拟机使用主机代理访问谷歌
vmware虚拟机使用主机代理访问谷歌
|
4月前
|
安全 网络安全
【Azure 环境】当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口?
【Azure 环境】当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口?
|
4月前
|
Ubuntu
【ubuntu】【问题记录】vbox虚拟机无权限访问共享目录
【ubuntu】【问题记录】vbox虚拟机无权限访问共享目录
69 0
|
6月前
|
Java API Maven
使用Java Libvirt API 访问虚拟机信息
使用Java Libvirt API 访问虚拟机信息
|
7月前
|
前端开发 Java 应用服务中间件
在虚拟机的Windows操作系统中:通过Jar方式若依项目,以及在外部的访问!
在虚拟机的Windows操作系统中:通过Jar方式若依项目,以及在外部的访问!
211 1
|
大数据 Linux 网络安全
VirtualBox虚拟机里安装centos和虚拟机相互通讯和访问外网
VirtualBox虚拟机里安装centos和虚拟机相互通讯和访问外网
410 0
VirtualBox虚拟机里安装centos和虚拟机相互通讯和访问外网
|
Ubuntu 网络安全 Apache
物理机不能访问虚拟机kali的web服务解决方案记录
物理机不能访问虚拟机kali的web服务解决方案记录
466 0