Docker user-defined网络

文章2021-08-25
Docker user-defined网络-下一朵云

##user-defined网络

除了none、host、bride这三个自动创建的网络,我们也可以根据自己的需求创建user-defined网络

Docker提供三种usr-defined网络驱动:bridge、overlay、macvlan。overlay、macvlan用于跨主机的网络,本文只涉及bridge。

我们可以通过bridge驱动创建类似bridge网络的user-defined网络

docker network create --driver bridge my_net

通过docker network inspect my_net查看配置信息,我们发现Dokcer自动给my_net分配了网关和IP网段。

如果创建网络时指定- -subnet和- -gateway则可以自己指定IP网段

docker network create --driver bridge --subnet 172.12.0.0/24 --gateway 172.12.0.1 my_net2

容器要使用user-defined网络,需要在启动时通过- -network指定

docker run -it --network=my_net2 ubuntu

容器的IP将会是Docker从my_net2的subnet中自动分配的,如果需要容器指定一个静态IP,通过- – ip指定

docker run -it --network=my_net2 --ip 172.12.0.10 ubuntu

注:只有使用- -subnet创建的网络才能指定静态IP,否则报错!

##my_net2和默认的bridge网络可以通信吗?

如果在host上添加路由可以通信么?答案是不能,iptables会DROP掉docker0和my_net2所在的虚拟网卡之间双向的流量,因为docker设计上就是隔离不同的network的

如果想要让默认bridge网络和my_net2上的容器通信则需要通过添加网卡解决,给默认bridge网络的容器田间一块my_net2的网卡

docker network connect my_net [容器ID]

通过ip a或者ifconfig 查看容器网络配置,其中会增加一块网卡,并且从my_net2中获取一个IP地址,我们可以通过这个IP与原来在my_net2上名为ubuntu的容器通信。