前言
Docker容器内无法使用宿主机网络,很大原因是Docker网桥mtu与宿主机mtu不一致导致的。docker1.10版本后采用的方案是仅使用默认值1500,不再根据主机默认网卡mtu设定dockermtu,但是如果主机的mtu不是1500,如何调整mtu的值?
操作
1、停止Docker应用
2、将各节点分离:
副机执行 docker swarm leave 主机执行: docker swarm leave --force
3、删除网桥(主副机都需执行):
docker network rm docker_gwbridge
4、修改/usr/lib/systemd/system/docker.service(主副机都需执行)
ExecStart=/usr/bin/dockerd --mtu=1450 --data-root=/opt/container --insecure-registry=registry:35000 --insecure-registry=registry.sudytech.com:35000 --tlsverify --tlscacert=/opt/keys/server/ca.pem --tlscert=/opt/keys/server/server-cert.pem --tlskey=/opt/keys/server/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
5、重新创建网桥(主副机都需执行)
docker network create \
--subnet 169.254.32.1/20 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
--opt com.docker.network.driver.mtu=1450 \
docker_gwbridge
6、重启(主副机都需执行)
systemctl daemon-reload
systemctl restart docker
7、主机初始化,副机加入节点
docker swarm init
docker swarm join --token ......
8、主机删除ingress
docker network rm ingress
9、主机执行
docker network create -d overlay \
--subnet=169.254.48.0/20 \
--ingress \
--gateway=169.254.48.1 \
--opt com.docker.network.driver.mtu=1200 \
ingress
docker network create -d overlay --subnet=169.254.64.1/18 --attachable sudy_swarm
10、启动应用,ifconfg查看,mtu的值都已设置为1450
[root@vm-21a-01npy ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 169.254.1.1 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::42:d6ff:fe24:4a3c prefixlen 64 scopeid 0x20<link>
ether 02:42:d6:24:4a:3c txqueuelen 0 (Ethernet)
RX packets 329621 bytes 904663367 (862.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 322035 bytes 2344122707 (2.1 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker_gwbridge: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 169.254.32.1 netmask 255.255.240.0 broadcast 0.0.0.0
inet6 fe80::42:a2ff:fe15:6735 prefixlen 64 scopeid 0x20<link>
ether 02:42:a2:15:67:35 txqueuelen 0 (Ethernet)
RX packets 7926805 bytes 679918094 (648.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7926805 bytes 679918094 (648.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 10.1.1.5 netmask 255.255.255.0 broadcast 10.1.1.255
inet6 fe80::f816:3eff:fe3b:34f9 prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:3b:34:f9 txqueuelen 1000 (Ethernet)
RX packets 152800456 bytes 41769654570 (38.9 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 292972707 bytes 293110270575 (272.9 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 7926805 bytes 679918094 (648.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7926805 bytes 679918094 (648.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
veth3221df9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet6 fe80::2483:edff:fe50:308a prefixlen 64 scopeid 0x20<link>
ether 26:83:ed:50:30:8a txqueuelen 0 (Ethernet)
RX packets 160234 bytes 67282966 (64.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 160340 bytes 24796620 (23.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0