Docker 提供三种 user-defined 网络驱动:bridge, overlay 和 macvlan。overlay 和 macvlan 用于创建跨主机的网络,我们后面有章节单独讨论。
我们可通过 bridge 驱动创建类似前面默认的 bridge 网络,例如:
root@ubuntu:/myregistry/docker/registry/v2/repositories# docker network create --driver bridge my_net
9b75187556b09951e25c0fee62a8fe49ebacd86141b7108925993fe7a1a11ae5
root@ubuntu:/myregistry/docker/registry/v2/repositories# brctl show
bridge name bridge id STP enabled interfaces
br-9b75187556b0 8000.024238de4dcc no
docker0 8000.024273721cc8 no veth1b2c8de
这里新增了一个网桥 br-9b75187556b0
执行 docker network inspect 查看一下 my_net 的配置信息:
root@ubuntu:/myregistry/docker/registry/v2/repositories# docker network inspect my_net
[
{
"Name": "my_net",
"Id": "9b75187556b09951e25c0fee62a8fe49ebacd86141b7108925993fe7a1a11ae5",
"Created": "2018-10-31T02:03:48.695459701-07:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
这里 172.18.0.0/16 是 Docker 自动分配的 IP 网段。
我们可以自己指定 IP 网段吗?
答案是:可以。
只需在创建网段时指定 --subnet 和 --gateway 参数:
容器要使用新的网络,需要在启动时通过 --network 指定:
当前 docker host 的网络拓扑结构
这时候172.22.16.2跟172.22.16.8是可以相互之间ping通的,但是他们都ping不通172.17.0.2,原因是用了不同的网桥,为了让172.17.0.2 ping通其他两个容器,这时候需要让172.17.0.2增加一个网卡eth1,该网卡连接在my-net2上,就可以啦!
docker network connect
就可以添加一个网卡eth1连接到br-5d863e9f78b6上