[root@bogon ~]# ip a s
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo 本地地址
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c0:fb:a0 brd ff:ff:ff:ff:ff:ff
inet 192.168.216.131/24 brd 192.168.216.255 scope global dynamic ens33 本地网卡地址
valid_lft 1514sec preferred_lft 1514sec
inet6 fe80::898c:7638:57a8:cc3c/64 scope link
valid_lft forever preferred_lft forever
3: docker0: mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:bd:7a:37:71 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 docker 网络地址
valid_lft forever preferred_lft forever
同时linux是可以ping通docker的网络的
[root@bogon ~]# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.053 ms
64 bytes from 172.17.0.1: icmp_seq=3 ttl=64 time=0.038 ms
64 bytes from 172.17.0.1: icmp_seq=4 ttl=64 time=0.051 ms
^C
--- 172.17.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 0.031/0.043/0.053/0.010 ms
我们每启动一个docker容器,docker就会给容器分配一个默认的可用ip,我们只要安装了docker,就会有一个网卡docker0(bridge)。网卡采用桥接模式,并使用veth-pair技术。veth-pair就是一堆虚拟设备接口,成对出现,一段连着协议,一段彼此相连,充当一个桥梁。
docker每创建一个容器都会新建一个虚拟网络,docker0就像是一个虚拟的路由器一样,连接每一个容器,容器可以通过路由互相连通
–link
假设项目内的一个容器,重启导致变动ip了,如何解决指定ip
我们可以在容器启动命令中加入一个选项:–link,使得我们可以根据容器名来访问容器。
–link的本质是把需要连接的容器名/id写入启动容器的配置文件中,即增加了一个ip和容器名/id的映射
目前已经不建议使用这自定义网络
[root@bogon ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
29b39a82930b bridge bridge local
3d27d5cffef8 host host local
ba7b7c44994b none null local
docker中的网络模式有:
bridge:桥接(docker默认)/
none:不配置网络 /
host:和宿主机共享网络
docker run 命令默认带有一个参数–net bridge,此处的bridge指的就是docker0。
如果我们不想使用docker0,那如何创建一个新的网络
docker network create –driver 网络模式 –subnet 子网ip –gateway 网关 网络名
[root@bogon ~]# docker network create --driver bridge --subnet 198.168.1.0/16 --gateway 198.168.1.1 newnet
f3491701b1f50ab83fcfc0caf61d3a5636752ebbe9f896aa1d0832313a74a90c
[root@bogon ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
29b39a82930b bridge bridge local
3d27d5cffef8 host host local
f3491701b1f5 newnet bridge local
ba7b7c44994b none null local