docker修改默认分配网桥子网
在安装完docker,启动容器时,docker会为容器默认分配一个容器子网,一般为172.17.0.0/24,当该虚机运行其他容器需要创建额外的网桥,可能会造成与现有虚机或物理网络重复的情况,这样容器网络通信的时候就会出问题。
为了避免此问题,我们可在安装docker时,指定一个默认的网桥子网(综合公司现有的网络,挑选一个未使用到的),让后续启动的容器都在这个子网里创建网桥或者容器ip。
一、现有docker配置文件
[root@]# cat /etc/docker/daemon.json { "registry-mirrors": [ "https://dockerhub.azk8s.cn", "https://docker.mirrors.ustc.edu.cn", "http://hub-mirror.c.163.com" ], "max-concurrent-downloads": 10, "log-driver": "json-file", "log-level": "warn", "log-opts": { "max-size": "10m", "max-file": "3" }, "data-root": "/data/docker" }
二、查询路由及网桥
路由:
[devops@ ~]$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.16.0.1 0.0.0.0 UG 100 0 0 eth0 10.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0 10.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br-42e15d40f8c0 172.16.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth0 172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-923ad69f1d3a 172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-7bc6e6211d81 172.27.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-06cde0ff36a6 172.29.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-b756cddb71d9
网桥:
[root@03-centos7-redis devops]# docker network ls NETWORK ID NAME DRIVER SCOPE 50495afe3b3e bridge bridge local b756cddb71d9 dingtalk_default bridge local 923ad69f1d3a elastalert-docker-error_default bridge local 06cde0ff36a6 elastalert-docker_default bridge local 7bc6e6211d81 elastalert_default bridge local 0a2bdd5dca5f host host local 6a8d68b1a026 none null local 42e15d40f8c0 skywalking_default bridge local [root@03-centos7-redis devops]#
由上可发现,每个容器启动都会创建一个网桥,并分配一个子网,该容器在此子网内分配ip。若分配的子网与主机网络有冲突,势必会造成主机网络通信故障的问题。此时为避免,我们可以来修改docker默认分配的子网地址。
二、指定docker默认分配的子网
可在docker配置文件中添加以下配置,重启docker即可。
{ "registry-mirrors": [ "https://dockerhub.azk8s.cn", "https://docker.mirrors.ustc.edu.cn", "http://hub-mirror.c.163.com" ], "default-address-pools":[ { "base":"10.168.0.0/16", "size":24 } ], "max-concurrent-downloads": 10, "log-driver": "json-file", "log-level": "warn", "log-opts": { "max-size": "10m", "max-file": "3" }, "data-root": "/data/docker" }
三、重启docker
[root@]# systemctl restart docker
注:已创建的容器会继续使用已绑定的网桥进行通信,不清除的话,默认还会存在。所以需要将容器down掉,重新创建一个网桥并使用新的网桥来分配ip。
四、将现有容器停掉,重启启动
1、如果是docker-compose启动的容器,只需要docker-compose down -v即可,默认会remove掉当前使用的网桥,在docker-compose up -d时,会根据docker默认配置来新建一个网桥,而这个网桥便会使用我们前面指定的默认子网的ip。
2、如果是单纯的docker启动的容器,在我们修改完docker默认配置后,该默认网桥的子网就会更新为我们指定的子网,可通过查询来验证:
[root@]# docker network ls NETWORK ID NAME DRIVER SCOPE 0406a0ffc50e bridge bridge local eb3642010b55 host host local 07824f95dc1c none null local
而docker的四种网络模式用,默认使用bridge的方式来创建容器,及上面的ID为0406a0ffc50e的网桥,此时我们可以通过docker inspect来查看网桥子网是否更新:
[root@aicc-prod-0005 skywalking]# docker inspect 040 [ { "Name": "bridge", "Id": "0406a0ffc50ea4f6513610fd6b4422368e33f99b6266ca2a035ee8e37873d785", "Created": "2022-12-23T13:54:07.173725469+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "10.168.0.0/24" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" }, "Labels": {} } ]
根据以上输出结果,我们可以得出结论,该默认网桥的子网与我们预期设置的一致,后续在启动容器会在10.168.0.0/24这个子网中分配容器ip,不会在出现容器网络与虚机网络重复的状况。
标签:容器,子网,bridge,0.0,网桥,docker From: https://www.cnblogs.com/wushaoyu/p/17000559.html