方法一:安装 Docker 前配置 MTU
推荐在新装 Docker 时使用此方法。
步骤一:创建 Docker 配置目录
sudo mkdir -p /etc/docker步骤二:创建配置文件
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
"mtu": 1450
}
EOF该配置用于设置 Docker 默认 bridge 网络的 MTU。
注意: 如果 /etc/docker/daemon.json 已经存在,请先备份,并将 mtu 字段合并到原有 JSON 配置中,不要直接覆盖原配置。
步骤三:安装 Docker
按照 Docker 官方安装文档安装 Docker Engine:
https://docs.docker.com/engine/install/
安装程序启动 Docker 时,会读取 /etc/docker/daemon.json 中的配置。
如果安装程序已经启动 Docker,安装完成后可按后文的方法重启 Docker,并检查网络配置。
方法二:修改已安装 Docker 的 MTU
适用于 Docker 已经安装并运行的 VPS。
步骤一:备份现有配置
sudo mkdir -p /etc/docker
if [ -f /etc/docker/daemon.json ]; then
sudo cp /etc/docker/daemon.json \
/etc/docker/daemon.json.bak
fi步骤二:编辑配置文件
sudo nano /etc/docker/daemon.json如果原文件不存在,填写:
{
"mtu": 1450
}如果原文件已经包含其他配置,例如:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m"
}
}则合并为:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m"
},
"mtu": 1450
}注意 JSON 格式必须正确,不能出现多余的逗号,也不能重复定义同一个配置键。
步骤三:验证配置文件
sudo dockerd --validate \
--config-file=/etc/docker/daemon.json如果当前 Docker 版本支持该参数,且配置正确,应显示配置验证成功。
步骤四:重启 Docker
sudo systemctl restart docker检查 Docker 服务状态:
sudo systemctl status docker --no-pager如果服务启动失败,查看日志:
sudo journalctl -u docker -n 100 --no-pager重要: 重启 Docker 可能影响正在运行的容器和业务。生产环境操作前应做好备份并安排维护窗口。
验证 Docker 默认网络 MTU
步骤一:检查宿主机网卡
ip -br link找到实际使用的网卡,例如 eth0、ens3,然后执行:
ip link show dev eth0将 eth0 替换为实际网卡名称。
步骤二:检查 Docker 默认网桥
ip link show docker0确认输出中的 mtu 是否为 1450。
步骤三:检查 Docker 网络配置
docker network inspect bridge \
--format '{{json .Options}}'该命令用于查看默认 bridge 网络的选项。部分 Docker 版本或配置下,Options 中不一定直接显示 mtu,因此还需要检查实际网桥和容器网卡。
步骤四:检查容器网卡 MTU
启动一个临时测试容器:
docker run --rm alpine \
sh -c 'ip link show eth0'如果镜像中没有 ip 命令,可以使用:
docker run --rm alpine sh -c \
'apk add --no-cache iproute2 >/dev/null && ip link show eth0'查看输出中 eth0 的 mtu 是否为 1450。
如果测试容器显示的 MTU 仍然是 1500,应检查容器连接的网络类型、网络创建时间及对应网络驱动的配置。
自定义 Docker bridge 网络的 MTU 配置
daemon.json 中的 mtu 主要用于 Docker 默认 bridge 网络。对于自定义 bridge 网络,建议在创建网络时显式指定 MTU。
方法一:使用 Docker 命令创建网络
docker network create \
--driver bridge \
--opt com.docker.network.driver.mtu=1450 \
mynet查看配置:
docker network inspect mynet \
--format '{{json .Options}}'方法二:使用 Docker Compose
在 compose.yaml 中配置:
services:
app:
image: nginx:alpine
networks:
- app_net
networks:
app_net:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: "1450"启动服务:
docker compose up -d检查网络和容器网卡,确认实际 MTU 为 1450。
注意: 修改配置不会自动修改已经创建的自定义网络。已有网络需要在评估业务影响后重新创建,并重新连接相关容器。