Docker 动态更改 mtu?

Edd*_*die 8 mtu ifconfig docker docker-swarm

我有 9 个堆栈的生产 docker swarm,其中大多数都有卷。目前docker正在单节点运行。

我必须添加第二个节点,这是问题开始的地方。尤其是 portainer 的问题是——它变得非常滞后,几乎无法使用。此外,当我将一些容器移动到新节点时,我的项目似乎完全陷入困境 - 问题在于不同节点上的容器之间的通信。有些请求是可以的,但大多数请求似乎都被破坏了。

经过一番研究,我发现问题似乎出在 MTU 上。eth1的MTU是1450,docker默认是1500。

问题是,是否可以即时将 docker 的 MTU 更改为 1450?

我试过:

  1. 将密钥添加到 dockerd --mtu=1450 - docker 服务根本没有启动
  2. 在 docker-compose 中更改主网络的 mtu - 似乎它没有更新,我认为应该重新创建网络
  3. 将 mtu 选项添加到 /etc/docker/daemon.json 似乎也没有效果

如何更改工作生产服务器上的 mtu?可能的停机时间为 10-15 分钟是可以的,但我不想删除所有堆栈并重新创建它们。

如果配置

Edd*_*die 8

解决了。路还很长...

我的 docker 堆栈中有名为“m1”的 vps,最后昨天我意识到我无法在工作集群上更新 mtu((

所以我添加了“m2”(作为经理)和“m3”(作为工作人员),并在“m2”+“m3”(不是“m1”)上创建了docker swarm集群。

  1. 我修改了/lib/systemd/system/docker.service“m2”并--mtu=1450在此处添加:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --mtu=1450
Run Code Online (Sandbox Code Playgroud)

我还创建了新文件/etc/docker/daemon.json{ "mtu": 1450 }感谢@BMitch)

  1. 我删除了“m2”上的入口网络并使用选项重新创建了它"com.docker.network.driver.mtu": "1450"

  2. 我将 mtu 添加到项目中的所有覆盖网络(在 docker-compose 中):

networks:
  network1:
    driver: overlay
    driver_opts:
      com.docker.network.driver.mtu: 1450
Run Code Online (Sandbox Code Playgroud)

更新:这是“m2”+“m3”的目的 - 我能够检查问题是否在新集群上得到解决,而我的生产“m1”正在工作。我尝试了 portainer,它工作正常,没有任何我以前见过的延迟。下次我将只删除滞后 vps 上的堆栈,更新设置 (mtu) 并重新部署堆栈 - 这会更快!

  1. 我从“m1”中删除了堆栈并将卷复制到“m2”(感谢如何将docker卷从一台机器复制到另一台机器?

  2. 我将服务部署到“m2”并将我的域的 DNS 更新为“m2”ip

MTU 更新后工作正常,没有任何延迟!