1 背景介紹
小秦同學這幾天,在進行分布式系統的學習,難免需要搭建各種集群,但是,小秦同學非常窮,小秦同學的導師也非常地窮,沒有一個分布式集群來學習,所以只能靠虛擬機,docker之類的才能勉強進行學習這樣子,
小秦同學先在自己win10電腦上,安裝了一個vm虛擬機,在虛擬機上運行了一個ubuntu1604,然后在ubuntu1604上安裝docker,在docker上拉了一個ubuntu鏡像,生成了三個ubuntu容器,示意圖如下:

我想要在win10上使用IDEA寫代碼,直接操作我的分布式集群,
2 問題引入
有的同學可能有疑問了,想操作就直接操作呀,有什么問題嗎?當然是有問題的,因為docker與虛擬機默認是橋接的,它和win10不處于同一個網段,無法ping通,所以不能直接通信?下面給出一個網路示意圖:

注意:虛擬機與win10網路請選擇NAT,不要選擇橋接,后面會給出解釋,
3 解決方案
目前,我們在win10下,可以ping通虛擬機,在虛擬機下,可以ping通docker容器,想要在win10下ping通docker容器,只需要在win10上添加一條靜態路由,訪問docker容器時,將路由的下一跳地址指定為虛擬機地址即可,操作如下:
- 以管理權限打開cmd命令視窗

- 添加靜態路由
route add -p 172.17.0.5 mask 255.255.255.255 192.168.190.128
解釋:
add 表示添加路由
-p 表示 永久添加,重啟后依然有效
172.17.0.2 搭配掩碼 255.255.255.255 一起來指定目標地址,此處應是你的docker容器ip地址
192.168.190.128 指定下一跳地址,此處應是你的虛擬機的ip地址

可以通過route print查看是否添加成功

如果你不小心添加錯了,可以通過route delete 172.17.0.5來洗掉路由,
到此,就完成操作了,如果不生效,可能需要重啟電腦,
4 可能的問題
小秦同學也是一路掉坑里,再慢慢爬起來的,也知道操作程序中可能一不小心就掉坑里了,下面給出一些常見的坑:
1 虛擬機開啟了防火墻
有可能虛擬機開啟了防火墻,關掉就好了,指令,ubuntu1604是
ufw disable
2 虛擬機和win10的網路選擇了橋接模式
如果選擇了橋接模式,相當于虛擬機的網路和win10網路是獨立的,兩者地位平等,是無法在win10配置到虛擬機的路由的,橋接模式下,只有通過配置路由器,才能設定到虛擬機的路由,
所以,請選擇NAT模式,NAT模式下,虛擬機的網路,相當于win10網路的內網


3 虛擬機未開啟路由轉發功能
ubuntu1604下,使用一下指令查看
cat /proc/sys/net/ipv4/ip_forward

如果是1,表示已經開啟,如果是0,表示沒有開啟,需要開啟
vim /etc/sysctl.conf
將注釋掉的
net.ipv4.ip_forward=1
打開

然后重啟就好了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/42743.html
標籤:其他
