Docker中通过daemon.json配置MTU本质是为新建容器的docker0网桥设统一值,需添加"mtu":1450等整数字段、重启Docker服务,并用临时容器触发更新,生效后新容器eth0将继承该MTU。
在 docker 中通过 daemon.json 配置容器网络 mtu,本质是为所有新建容器的默认 bridge 网络(即 docker0)设定统一的最大传输单元值。该配置只影响后续创建的容器,已有容器不受影响。
直接修改 daemon.json 添加 mtu 字段
编辑 /etc/docker/daemon.json 文件(若不存在可新建),在 JSON 对象中加入 "mtu" 键值对:
{
"mtu": 1450
}
注意:
• 数值需根据实际网络环境确定,常见云平台(如 AWS、阿里云)推荐设为 1400 或 1450,以适配底层 VXLAN/GRE 封装开销;
• 若文件中已有其他配置(如 registry-mirrors、dns),需合并为合法 JSON,用逗号分隔字段;
• 值必须为整数,不能带单位或引号。
重启 Docker 服务使配置生效
保存文件后执行:
sudo systemctl daemon-reload
sudo systemctl restart docker
重启后:
• docker0 接口不会立即更新 MTU——它仅在**首个新容器启动时**自动重置为配置值;
• 可运行一个临时容器触发更新:docker run --rm alpine ip link show docker0 | grep mtu;
• 宿主机上验证:ip link show docker0 | grep mtu。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
验证新建容器是否继承该 MTU
启动新容器后进入检查:
docker run -it --rm alpine sh -c "ip link show eth0 | grep mtu"
输出应类似:link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff mtu 1450。
若仍显示 1500,说明:
• Docker 服务未真正重启成功;
• 或该容器未使用默认 bridge 网络(例如指定了 --network host 或自定义网络);
• 或 daemon.json 格式错误导致配置未加载(可用 sudo docker info | grep MTU 查看是否识别)。
与其他网络配置共存的注意事项
mtu 可与以下常用网络参数同时存在,互不冲突:
-
"bip": "172.20.0.1/24"—— 自定义docker0的 IP 和子网 -
"dns": ["223.5.5.5", "223.6.6.6"]—— 指定容器默认 DNS -
"default-address-pools"—— 控制容器 IP 分配范围
但需注意:
• 修改 bip 会导致已运行容器网络中断(需手动重启);
• mtu 单独修改则无此副作用,更安全;
• 若业务对网络稳定性要求高(如 Spark、gRPC 微服务),建议搭配自定义 bridge 网络使用,避免全局影响。

















