Недавно две несвязанные команды начали работать очень плохо в контейнере Docker с хост-сетью:

Android adb потребовалось около 12 секунд, чтобы подключиться к серверу adb другого компьютера, чтобы использовать его эмуляторы, а Ruby понадобилось более 2 минут для подключения к https://rubygems, org.

Обе команды обычно выполняются в течение доли секунды и продолжают выполняться при выполнении на хост-машине контейнера или при выполнении с определенными различными целевыми серверами в одной сети.

Особенно

ruby -ropen-uri -e 'p open("https://rubygems.org").read'|od -ta |head -2

взял 2m12 на Ruby 2.1.2 и через минуту перестал работать с Ruby 2.5.1.

1 ответ1

0

Для внутренних серверов кто-то выделил IPv6-адреса для них, но не удосужился сообщить машине о них, и ADB работал в течение трех тайм-аутов IPv6, прежде чем пытаться использовать IPv4.

Что касается внешних адресов, тот же кто-то разрешил DNS возвращать адреса IPv6, даже если наш внешний маршрутизатор отбрасывал пакеты - тот же базовый принцип с тайм-аутом с IPv6 перед попыткой IPv4.

Очевидное предположение, что отключение IPv6 для хоста медленными командами не работает, потому что, к сожалению, Android ADB находит логику IPv6 в ОС и взрывается, когда ОС говорит, что она недоступна.


Мой коллега только что указал мне, что /etc/gai.conf может использоваться для предоставления приоритета IPv4.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .