Время ожидания TCP-соединений между контейнерами docker истекает после ~10000 подключений

У меня есть 2 контейнера, определенные в файле docker-compose.yml, и я использую их для запуска некоторых тестов rspec в конвейере CI - первый контейнер выполняет тесты, второй - контейнер nginx, который настроен для выполнения перенаправлений для множества разных путей... но я сталкиваюсь с некоторым неожиданным поведением при их выполнении.

Тесты состоят примерно из ~ 12000 URL-адресов, и первый контейнер выполняет запрос GET к контейнеру nginx для каждого из них, проверяя, перенаправляет ли он в ожидаемое местоположение.

Странность возникает, когда ~ 10000 URL-адресов были успешно проверены - остальные попытки подключения к контейнеру nginx завершаются с таймаутом чтения. Просмотр журналов nginx показывает, что он считает, что все в порядке; он обслуживает ожидаемые ответы вплоть до тайм-аутов чтения, а затем будет 2 записи для первого неудачного тестового URL-адреса, и ничего после него. Сетевое подключение просто перестает работать после этого момента.

Когда я выполняю docker-compose up на моей локальной машине тесты проходят, и все в порядке. Когда я пытаюсь запустить ту же команду с тем же docker-compose.yml на одном из моих агентов CI, мы сталкиваемся с вышеупомянутой проблемой - ~ 10000 успешных тестов, а затем тайм-аут чтения между контейнерами.

До сих пор я пытался переопределить тест так, чтобы не все запросы попадали в nginx в течение 10 секунд (например, задержка в 0,05 секунды между каждым запросом или задержка в 1 секунду каждые 100 запросов и т.д.)... Я ожидал, что это может дать docker время для повторного использования некоторых подключений, но все, что он сделал, это заставил сборку занять больше времени для сбоя в одной и той же точке. Я также убедился, что на моих агентах CI запущена последняя версия docker (18.09), так как я увидел некоторые проблемы с github, описывающие то, что я считал похожими на мои проблемы, и были решены путем обновления docker до текущей версии - похоже, не в моем случае.

Я просто не уверен, где искать дальше - обновив агенты CI с помощью последней версии docker и несколько раз переопределив тест, у меня заканчиваются идеи о том, что может быть причиной этого. Это, конечно, кажется связанным с docker, поскольку все работает нормально вне контекста docker, но журналы docker, похоже, также не указывают на что-то неожиданное.

Мои вопросы: кто-нибудь еще сталкивался с подобными вещами раньше? Где я должен искать дальше, чтобы найти первопричину этого?

Заранее спасибо.

Итак, оказывается, проблема связана с docker-composer, а именно с этой проблемой: https://github.com/docker/compose/issues/6018

Удалось обойти проблему, направив все выходные данные журнала nginx в /dev /null, а не в stdout/stderr