新买的电脑,win10家庭版的,没有人权,只能用toolbox版本的,因为没有路由配置,所以默认是无法通过ip从主机访问到容器的
那么首先想到的就是添加静态路由来指定访问路由(docker虚拟机是192.168.99.100,172.17.0.0和172.18.0.0是容器使用的ip段):
route -p add 172.17.0.0 mask 255.255.0.0 192.168.99.100 route -p add 172.18.0.0 mask 255.255.0.0 192.168.99.100
添加了路由之后结果发现还是访问了,这就奇了怪了,主机到docker虚拟机,以及docker虚拟机到容器都是通的,但是连起来就不通了
经过一番搜索,发现win10下docker在启动的时候默认加了一条过滤规则,
ACCEPT all — any docker0 anywhere anywhere ctstate RELATED,ESTABLISHED
导致请求无法转发,知道这个就好办了,首先在docker虚拟机上通过route -e看下网段和网卡对应关系:
docker@default:~$ route -e Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0 127.0.0.1 * 255.255.255.255 UH 0 0 0 lo 172.17.0.0 * 255.255.0.0 U 0 0 0 docker0 172.18.0.0 * 255.255.0.0 U 0 0 0 br-45009f10ac60 192.168.99.0 * 255.255.255.0 U 0 0 0 eth1
然后放通转发规则:
sudo iptables -t filter -I FORWARD 3 -o docker0 -j ACCEPT sudo iptables -t filter -I FORWARD 3 -o br-45009f10ac60 -j ACCEPT
再在主机上ping一下容器,发现可以正常访问了,开心