调整Docker容器MTU可提升网络吞吐量,关键在于适配底层物理网络与封装开销;云环境或overlay网络推荐MTU设为1450或1400,可通过自定义网络、Docker Compose或全局daemon.json配置,并需验证连通性与分片情况。

在Docker中调整容器MTU是提升网络吞吐量的直接有效手段,关键在于让数据包尺寸适配底层物理网络与封装开销,避免分片或丢包。多数云环境和overlay网络实际可用MTU小于1500,硬用默认值反而会触发IP分片、增加重传,拖慢大流量传输。
确认当前MTU并判断是否需要调整
先检查宿主机网卡和Docker默认桥接网络的实际MTU:
- 查宿主机主网卡(如eth0):
ip link show eth0 | grep mtu - 查docker0桥接网卡:
ip link show docker0 | grep mtu - 查已有Docker网络MTU:
docker network inspect bridge | grep -i mtu
若宿主机MTU为1500,但运行在AWS/Azure/GCP等云平台,或使用VXLAN/Calico/Cilium等CNI插件,实际推荐值通常是1450或1400——因为每层封装(如VLAN标签、VXLAN头、GRE头)会额外占用20–50字节。
三种常用配置方式,按适用场景选择
方式一:创建自定义网络时指定MTU(推荐用于新项目)
- 命令示例:
docker network create --driver bridge --subnet 172.20.0.0/16 --mtu 1450 my-app-net - 启动容器时显式接入:
docker run -d --network my-app-net --name api nginx - 优势:隔离性强,不影响其他网络;支持子网、网关等精细控制
方式二:Docker Compose中声明MTU(适合编排部署)
- 在
docker-compose.yml的networks段添加:
app-net:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: "1450"
services:
web:
networks: [app-net]
方式三:全局设置(适用于统一管理的集群)
- 编辑
/etc/docker/daemon.json,加入:{"mtu": 1450} - 重启Docker守护进程:
sudo systemctl restart docker - 注意:该设置影响所有新建容器和默认bridge网络,已有容器需重建才生效
验证与调优建议
配置完成后务必验证效果:
- 进容器检查:
docker exec -it <container> ip link show eth0 | grep mtu</container> - 测试连通性与分片:
docker exec -it <container> ping -M do -s 1422 <target-ip></target-ip></container>(1422 + 28字节IP+ICMP头 = 1450总长,-M do表示禁止分片) - 若返回"Packet too big",说明MTU仍偏大;若能通且无丢包,再逐步加大-s值测试极限
生产环境中,1450是云平台最稳妥的起点;裸金属或私有数据中心可尝试1490甚至1500,但必须同步确认宿主机、交换机、防火墙等全链路MTU一致。


















