安装Docker时,它会自动建立三个网络,bridge(建立容器默认链接到此网络)、 none 、hostlinux
网络模式 | 简介 |
Bridge | 此模式会为每个容器分配、设置IP等,并将容器链接到一个docker0虚拟网桥,经过docker0网桥以及Iptables nat表配置与宿主机通讯。 |
Host | 容器将不会虚拟出本身的网卡,配置本身的IP等,而是使用宿主机的IP和端口。 |
Container | 建立的容器不会建立本身的网卡,配置本身的IP,而是和一个指定的容器共享IP、端口范围。 |
None | 该模式关闭了容器的网络功能。 |
自定义网络 | 略 |
咱们在使用docker run建立Docker容器时,能够用 --net 选项指定容器的网络模式,Docker能够有如下4种网络模式:git
host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
bridge模式:使用 --net=bridge 指定,默认设置。
container模式:使用 --net=container:NAME_or_ID 指定。docker
1>. 背景json
Docker 服务启动后默认会建立一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其余的物理或虚拟网卡,这就将全部容器和本地主机都放到同一个物理网络。vim
Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间能够经过网桥相互通讯,它还给出了 MTU(接口容许接收的最大传输单元),一般是 1500 Bytes,或宿主主机网络路由上支持的默认值。这些值均可以在服务启动的时候进行配置。centos
2.> 环境服务器
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# docker version Client: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-102.git7f2769b.el7.centos.x86_64 Go version: go1.10.3 Git commit: 7f2769b/1.13.1 Built: Mon Aug 5 15:09:42 2019 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: docker-1.13.1-102.git7f2769b.el7.centos.x86_64 Go version: go1.10.3 Git commit: 7f2769b/1.13.1 Built: Mon Aug 5 15:09:42 2019 OS/Arch: linux/amd64 Experimental: false [root@localhost ~]#
3.> 修改默认docker0网桥网络
[root@localhost ~]# ifconfig docker0 docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0 ether 02:42:52:5d:13:f2 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@localhost ~]#
咱们能够看到默认docker0的网段是172.xx.xx.xxui
修改文件 /etc/docker/daemon.json 添加内容 "bip": "ip/netmask" [ 切勿与宿主机同网段 ]spa
[root@localhost ~]# vim /etc/docker/daemon.json { "bip":"192.168.100.1/24" }
4.> 重启服务器
[root@localhost ~]# systemctl restart docker.service
5.> 查看docker0的网段
[root@localhost ~]# ifconfig docker0 docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.100.1 netmask 255.255.255.0 broadcast 0.0.0.0 ether 02:42:52:5d:13:f2 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@localhost ~]#
OK,到这里咱们已经成功的修改了docker0的网桥.