环境为win10,局域网段192.168.1.x,网关192.168.1.1
1、安装docker for window
2、打开docker的setting,查看默认的docker宿主所在的虚拟网段为10.0.75.0:
3、现在我们给docker创建一个自定义网段,和我们局域网段一致,均为192.168.1.x,别名为ccnetwork
docker network create --subnet=192.168.1.0/24 --gateway=192.168.1.1 ccnetwork
4、创建docker容器的时候指定使用ccnetwork该网段,并且为容器分配固定IP为192.168.1.123
docker run --privileged -itd --net ccnetwork --ip 192.168.1.123 --name mydocker ccproxy
5、启动容器后发现,容器可以完全访问外网网络,也可以访问局域网段192.168.1.x
6、但是局域网192.168.1.x所在的机器无法访问该容器,即:192.168.1.123,这是为什么呢?因为其实容器并不是直接分配在win10上的,而是分配在docker宿主环境中,因此不是我们想象的这样:
win10 <-> docker容器
-------------------------------------------
192.168.1.x 192.168.1.123
而是:
win10 <-> docker宿主 <-> docker容器
-------------------------------------------------------------------------------
192.168.1.x 10.0.75.1 10.0.75.2 / 192.168.1.123
10.0.75.2这个才是docker容器位于docker宿主虚拟网段10.0.75.x中分配的真实ip
因此,我们需要在win10上修改下的route规则,route print看下默认的规则先:
然后:route -p add 192.168.1.0 mask 255.255.255.0 10.0.75.2
are you ok?