Рейтинг:1

Таймауты сети Docker при использовании моста

флаг vn

Я работаю на выделенном сервере с версией Ubuntu 20.04.3 ЛТС (ядро 5.4.0-96-общий) и Докер 20.10.7, сборка 20.10.7-0ubuntu5~20.04.2. Система свежеустановленная.

у меня есть Докерфайл для одного из моих сервисов, который использует некоторые библиотеки с помощью подходящий и иди возьми. Один из промежуточных контейнеров всегда не может подключиться к Интернету из-за ошибок DNS или TCP Timeout. Какой из контейнеров выходит из строя, совершенно случайно.

Также обратите внимание, что проблема не в одной конкретной службе, я попытался создать совершенно другую службу, которая работает на NodeJS и установка нпм не удалось с теми же ошибками

Сегодня у меня также возникла проблема, из-за которой мой контейнер Nginx был недоступен. Все подключения к нему приводили к ошибкам тайм-аута.

Соединения между контейнерами с использованием сетей докеров также работают некорректно.

Бег sudo systemctl перезапустить докер временно устраняет проблему, но она снова появляется через одну или две сборки. Когда я строю с хозяин сеть вместо сети моста по умолчанию, проблема исчезла, поэтому я заподозрил неисправную конфигурацию моста.

Я пытался переустановить Docker, сбросить настройки iptables и моста, настроить разные DNS-серверы, но безрезультатно. Файлы журнала Docker не показывают ошибок.

Что может быть причиной этой проблемы?

Обновлять:

Я отключил UFW, но безуспешно. Это дамп из моего журнала dmesg во время сборки, время ожидания которой истекло, возможно, это поможет определить причину:

[758001.967161] docker0: порт 1 (vethd0c7887) заблокирован
[758001.967165] docker0: порт 1 (vethd0c7887) перешел в отключенное состояние
[758001.967281] устройство vethd0c7887 перешло в неразборчивый режим
[758002.000567] IPv6: ADDRCONF(NETDEV_CHANGE): veth7e3840a: ссылка готова
[758002.000621] IPv6: ADDRCONF(NETDEV_CHANGE): vethd0c7887: ссылка готова
[758002.000644] docker0: порт 1 (vethd0c7887) заблокирован
[758002.000646] docker0: порт 1 (vethd0c7887) перешел в состояние пересылки
[758002.268554] docker0: порт 1 (vethd0c7887) перешел в отключенное состояние
[758002.269581] eth0: переименован из veth7e3840a
[758002.293056] docker0: порт 1 (vethd0c7887) заблокирован
[758002.293063] docker0: порт 1 (vethd0c7887) перешел в состояние пересылки
[758041.497891] docker0: порт 1 (vethd0c7887) перешел в отключенное состояние
[758041.497997] veth7e3840a: переименован из eth0
[758041.547558] docker0: порт 1 (vethd0c7887) перешел в отключенное состояние
[758041.551998] устройство vethd0c7887 вышло из беспорядочного режима
[758041.552008] docker0: порт 1 (vethd0c7887) перешел в отключенное состояние
sb9 avatar
флаг cn
sb9
просто случайное предположение ... но если бы вы также могли проверить свою службу брандмауэра и посмотреть, есть ли там какие-либо сбои, отключить ее и повторить попытку, если требуется. Недавно я столкнулся с аналогичной проблемой в разрешении DNS кластера kubernetes, для которой пришлось полностью отключить службу firewalld.
флаг vn
@ sb9 У меня есть несколько журналов `dmesg`, в которых говорится, что UFW заблокировал некоторые мостовые соединения. Я полностью отключил UFW и перезапустил dockerd, но время сборки докера все еще истекло :(
sb9 avatar
флаг cn
sb9
хорошо .. попробуйте проверить с помощью образа dnsutil и выполнить nslookup для любого полного доменного имени из контейнера и с хоста и посмотреть, будут ли результаты одинаковыми. docker run -it tutum/dnsutils nslookup docker run -it tutum/dnsutils копать у вас включен selinux на вашем компьютере с Ubuntu. Если бы вы могли проверить, отключить и перезагрузить компьютер. Не уверен, что это может вызвать какие-либо проблемы.
флаг vn
@sb9 извините за поздний ответ, у меня был стресс. Я проверил, selinux отключен на моей машине. Пробовал перезапускать, но и это не помогло. Я провел предложенные вами тесты, вот мои результаты: https://pastebin.com/u3RTgxww - похоже, он работает только для одного контейнера после перезапуска.
флаг vn
@ sb9 Я немного покопался и обнаружил, что после первого запроса моя сеть `docker0` теряет свой IPv4-адрес, поэтому больше не может получать пакеты.Я подтвердил это, используя «sudo ifconfig docker0 172.17.0.1», что временно устраняет проблему.
Рейтинг:1
флаг ar

Если у вас есть эти в dmesg:

[15300.615904] сосед: arp_cache: таблица соседей переполнена!

попробуй это:

sudo sysctl -w net.ipv4.neigh.default.gc_thresh3 = 30000
sudo sysctl -w net.ipv4.neigh.default.gc_thresh2 = 20000
sudo sysctl -w net.ipv4.neigh.default.gc_thresh1 = 10000
флаг vn
Спасибо, но я не нашел таких сообщений в своем `dmesg`
Рейтинг:0
флаг vn

Наконец, после долгих поисков, я нашел проблему:

Мой докер0 сеть теряла свой IPv4-адрес после завершения первого запроса и, следовательно, не могла связаться с остальной частью Интернета.

Этот комментарий к проблеме на GitHub окончательно решил проблему для меня: Моби#40217: Мой systemd-networkd руководил докер0 сети, и каким-то образом сработала проверка потери несущей, что затем вызвало сетевой чтобы удалить IPv4. Маркировка докер0 и бр-* сети как неуправляемые наконец-то заставили все работать корректно

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.