Docker中配置MTU有三种方式:一是全局修改daemon.json设mtu字段并重启Docker服务,影响所有新建容器;二是创建自定义bridge网络时用--opt指定MTU,灵活安全;三是对运行中容器临时执行ip link set修改,重启失效。

在 Docker 中配置容器的 MTU 值,核心是控制数据包在网络层的最大尺寸,避免因分片或丢包导致连接不稳定、传输缓慢等问题。实际操作中,有三种主流方式:全局修改 Docker 守护进程默认值、为特定网络单独设置、或对运行中容器临时调整。选择哪种方式,取决于你是否需要统一策略,还是只为某类业务(如 Spark、Jupyter 或跨云通信)做精细化适配。
修改 Docker 守护进程的全局 MTU
适用于所有新建容器,一劳永逸,但会覆盖默认行为。关键步骤如下:
- 编辑 /etc/docker/daemon.json,添加 mtu 字段(若文件不存在可新建):
{"mtu": 1450} - 重启 Docker 服务:
sudo systemctl restart docker - 注意:已有容器不受影响;重启后若
docker0接口暂未启用(无运行容器),ip link show docker0可能仍显示 MTU=1500,等首个容器启动后即自动更新为新值
创建自定义 bridge 网络并指定 MTU
更灵活、更安全的方式,不干扰默认 bridge 网络,适合多环境共存或测试验证:
- 创建新网络,例如使用子网
172.20.0.0/16和 MTU=1400:docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 --opt com.docker.network.driver.mtu=1400 my-mtu-net - 启动容器时直接接入该网络:
docker run -d --name app1 --network my-mtu-net nginx - 验证:进入容器执行
ip link show eth0 | grep mtu,应输出类似mtu 1400
对已运行容器临时修改 MTU
仅限调试或应急,容器重启后失效,不可用于生产长期依赖:
- 进入容器:
docker exec -itsh - 查看当前接口 MTU:
ip link show eth0 - 临时修改(需 root 权限):
ip link set dev eth0 mtu 1450 - 如需持久化,可在容器启动命令中加入初始化脚本,或改用前两种方式
补充说明与验证建议
无论采用哪种方式,都建议验证实际效果:
- 宿主机上检查
docker0的 MTU:ip link show docker0 | grep mtu - 容器内确认接口值:
docker execip link show eth0 | grep mtu - 若涉及云平台(如 AWS、阿里云),常见推荐值为 1400–1450,因底层虚拟网络可能引入额外封装开销











