Через несколько часов я смог решить проблему
MTU мостовой сети докера должен соответствовать MTU сетевого адаптера хоста.
В моем случае MTU eth0 (хост) был установлен на 1450, а MTU docker0 — на 1500.
Вы можете изменить MTU либо
В случае, если у вас нет /etc/докер/daemon.json
просто создайте один:
# /etc/docker/daemon.json
# настроить MTU в соответствии с сетевым адаптером хоста
{
"мту": 1450
}
Не забудьте перезапустить docker.service: systemctl перезапустить docker.service
Более подробная информация:
Если вы не хотите проверять настройки, используйте IP
и сравните значение mtu
$ ip а
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> **mtu 1450** qdisc fq_codel состояние UP группа по умолчанию qlen 1000
...
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> **mtu 1500** qdisc noqueue state DOWN group default
...
Обратите внимание, что docker0 всегда указывает 1500 и меняет его значение, только если контейнер подключен к этой сети.
$ ip а
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
...
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default
...
17: vethe4b452f@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master docker0 state UP group default
...
Пользовательская сеть
Я также попытался просто создать пользовательскую сеть с определенным МТУ
вместо того, чтобы установить МТУ
с помощью /etc/докер/daemon.json
. Это не сработало, и я не знаю, почему
создание сети докеров --opt com.docker.network.mtu=1450 CustomMTU