windows下无法ping通docker容器

windows下hyper-v虚拟机配置连通docker网络

一、出现问题

我在windows下配置了一个docker网络,用于构造redis集群

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bdrezWCK-1626664291614)(C:\Users\96213\Desktop\md文件\windows下docker网络.assets\image-20210719103749913.png)]

可以看到已经分配好了子网地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DA2ucNPr-1626664291617)(C:\Users\96213\Desktop\md文件\windows下docker网络.assets\image-20210719103855471.png)]

但是在实际启动的时候,redis集群的滑槽没法跳转到别的redis服务器,即无法telnet到某个子网的6379端口。

二、问题分析

docker在windows下运行是通过hyper-v虚拟机挂载运行的,网络适配器上可以看到两个虚拟机提供的vethnet,其中WSL是docker的代理,我们telnet 127.0.0.1 6379,就是通过这个转发到docker0网络的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tdSLTjWB-1626664291619)(C:\Users\96213\Desktop\md文件\windows下docker网络.assets\image-20210719104727322.png)]

所以当没有配置端口转发和路由表映射的情况下,请求我们配置的某个子网+端口是无法被转发到虚拟机内的docker0网络下的!

三、解决问题

1、在网络适配器中WSL添加之前分配好的docker子网地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QvkXY7z0-1626664291622)(C:\Users\96213\Desktop\md文件\windows下docker网络.assets\image-20210719105018824.png)]

高级中添加ip地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ACNjriK-1626664291623)(C:\Users\96213\Desktop\md文件\windows下docker网络.assets\image-20210719105040743.png)]

2、设置端口监听和端口转发

# 在powershell中设置监听端口和转发端口
# netsh interface portproxy add v4tov4
# listenport是监听端口,listenaddress是本地127.0.0.1,connectport是链接端口,connectaddress是WSLip

netsh interface portproxy add v4tov4 listenport=6379 listenaddress=127.0.0.1 connectport=7001 connectaddress=172.22.240.1

# 一个一个添加后,查看所有转发路由映射
PS C:\Windows\system32> netsh interface portproxy show all

侦听 ipv4:                 连接到 ipv4:

地址            端口        地址            端口
--------------- ----------  --------------- ----------
172.38.0.11     6379        172.22.240.1    7001
172.38.0.12     6379        172.22.240.1    7002
172.38.0.13     6379        172.22.240.1    7003
172.38.0.14     6379        172.22.240.1    7004
172.38.0.15     6379        172.22.240.1    7005
172.38.0.16     6379        172.22.240.1    7006

PS C:\Windows\system32>

3、设备管理器中重新启用hyper-v网络适配器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-48W9Y0Yw-1626664291626)(C:\Users\96213\Desktop\md文件\windows下docker网络.assets\image-20210719110519273.png)]

telnet 172.38.0.11 6379
# 此时可以进入redis集群中了

四、总结

在window下做开发十分复杂,经常会出现意想不到的问题,建议在linux环境下开发,实在不行mac也可以!

你可能感兴趣的:(服务器,学习,docker)