Bootstrap

wsl虚拟机中的dockers容器访问不了物理主机

1 首先保证wsl虚拟机能够访问宿主机IP地址,wsl虚拟机通过vEthernet (WSL)的地址访问,着意味着容器也要通过此IP地址访问物理主机。

2 遇到的问题:wsl虚拟机中安装了docker,用在用到docker容器内的开发环境,但是虚拟机对宿主机的多个ip地址都无法ping通。

3 在防火墙,杀毒软件等卸载安装更新情况下会让之前的设置失效,突然无法访问宿主机,

查看宿主机ip地址,可能有多个ip地址虚拟机wsl专用 vEthernet (WSL):ok的ip地址

设置防火墙允许ip地址访问

以管理员身份运行cmd或Windows PowerShell,输入

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow

进入wsl,ping vEthernet (WSL)对应的ip地址通过。

4 最大问题:docker容器内部始终无法访问外部的主机应用,为了访问,额外添加了容器端口和虚拟机端口映射,在容器中安装ping和telnet测试,发现容器能ping通主机ip,但连接应用程序端口出现问题,连接被关闭,这种使用容器连接虚拟机映射的端口本来就是错误的想法,因为虚拟机的端口容器可以直接访问但是无应用就报连接被关闭问题。

为了容器连接宿主机,一直在找原因,最开始想的是防火墙,但是我设置了出栈和进栈规则,就去找其他原因,走了不少弯路,头都大了。甚至放弃物理主机应用使用同一环境下的docker环境,想一想我愚蠢的尝试,还真离谱,起初是在虚拟机层上安装iptables来将容器端口和虚拟机端口来做映射这样即便我容器中没有对虚拟机做映射也能将数据转发到容器或者将容器数据转发到虚拟机这样多希望虚拟机它是一个智能机还能帮我转发到宿主机,这离谱的想法是我想多了,想的像物理机访问虚拟机一样将数据代理到容器,因为有端口映射,事实,虚拟机不会也不能帮容器做事情,最终还是回到物理机的ip上,能通过ip访问,为什么走代理,但问题IP也不能用,除去容器访问虚拟机,虚拟机代理访问物理机的愚蠢想法,现在要做的只有放弃物理机的应用,或者解决容器和物理机的连通问题,很突然想到用过的其他容器也好像访问过物理机的应用,在容器能ping物理机的情况下更加确定是防火墙的问题,在卸载了不好用的电脑管家之后,换了微软管家发现系统一直在更新,优化了不少安装选项,端口管制严格,电脑也轻便了不少,就是不让你随便访问数据,确定了连通信没问题就解决防火墙问题。

5 设置了防火墙的出栈进栈为什么没起作用,这也导致之前走弯路的原因,另外一个是想访问虚拟机间接访问主机,要知道映射端口是直接可访问,到无程序所以报连接成功但有关闭,这还以为是应用程序拒绝了ip的访问,

6 解决尝试,关闭电脑防火墙,公网和私网,进入容器 telnet ip 端口 发现访问成功,现在在用虚拟机ip访问加映射端口,如下同样拒绝。

7 现在可以访问了,但是安装吗?肯定不安装,因为网络上很容器知道用户的常用ip

端口,如果每防火墙那自己的电脑会处在高压负荷中,性能也会大大下降,所以还是打开防火墙,继续安全使用,而且主要阻止容器访问的应用的是公用网络,解决它就没问题。

8 如果ping不同主机ip就设置防火墙,类型任何协议,ip地址加上主机的IP或者任何ip地址而不仅仅tcp。

;