10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会

时间:2020-9-14 作者:admin

1 背景介绍

小秦同学这几天,在进行分布式系统的学习,难免需要搭建各种集群。但是,小秦同学非常穷,小秦同学的导师也非常地穷,没有一个分布式集群来学习。所以只能靠虚拟机,docker之类的才能勉强进行学习这样子。
小秦同学先在自己win10电脑上,安装了一个vm虚拟机,在虚拟机上运行了一个ubuntu1604,然后在ubuntu1604上安装docker,在docker上拉了一个ubuntu镜像,生成了三个ubuntu容器。示意图如下:
10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会
我想要在win10上使用IDEA写代码,直接操作我的分布式集群。

2 问题引入

有的同学可能有疑问了,想操作就直接操作呀,有什么问题吗?当然是有问题的,因为docker与虚拟机默认是桥接的,它和win10不处于同一个网段,无法ping通,所以不能直接通信?下面给出一个网络示意图:
10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会
注意:虚拟机与win10网络请选择NAT,不要选择桥接,后面会给出解释。

3 解决方案

目前,我们在win10下,可以ping通虚拟机,在虚拟机下,可以ping通docker容器。想要在win10下ping通docker容器,只需要在win10上添加一条静态路由,访问docker容器时,将路由的下一跳地址指定为虚拟机地址即可。操作如下:

  1. 以管理权限打开cmd命令窗口
    10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会
  2. 添加静态路由
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地址

10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会
可以通过route print查看是否添加成功
10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会
如果你不小心添加错了,可以通过route delete 172.17.0.5来删除路由。
到此,就完成操作了,如果不生效,可能需要重启电脑。

4 可能的问题

小秦同学也是一路掉坑里,再慢慢爬起来的,也知道操作过程中可能一不小心就掉坑里了,下面给出一些常见的坑:

1 虚拟机开启了防火墙

有可能虚拟机开启了防火墙,关掉就好了,指令,ubuntu1604是

ufw disable

2 虚拟机和win10的网络选择了桥接模式

如果选择了桥接模式,相当于虚拟机的网络和win10网络是独立的,两者地位平等,是无法在win10配置到虚拟机的路由的,桥接模式下,只有通过配置路由器,才能设置到虚拟机的路由。
所以,请选择NAT模式,NAT模式下,虚拟机的网络,相当于win10网络的内网
10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会
10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会

3 虚拟机未开启路由转发功能

ubuntu1604下,使用一下指令查看

cat /proc/sys/net/ipv4/ip_forward

10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会
如果是1,表示已经开启,如果是0,表示没有开启,需要开启

vim /etc/sysctl.conf

将注释掉的

net.ipv4.ip_forward=1

打开
10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会
然后重启就好了。


如果这篇文章对你有所帮助,请别忘了点赞收藏转发加打赏哦!

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。