У меня есть 2 контейнера, определенные в файле docker-compose.yml, и я использую их для запуска некоторых тестов rspec в конвейере CI - первый контейнер выполняет тесты, второй - контейнер nginx, который настроен для выполнения перенаправления для многих различных пути ... но я сталкиваюсь с неожиданным поведением при их выполнении.
Тесты состоят примерно из 12000 URL-адресов, и первый контейнер выполняет запрос GET к контейнеру nginx для каждого из них, проверяя, перенаправляет ли он в ожидаемое место.
Странность возникает, когда ~ 10000 URL-адресов были успешно проверены - оставшаяся часть попыток подключения к контейнеру nginx умирает с таймаутом чтения. Просмотр журналов nginx показывает, что он считает, что все в порядке; он обслуживает ожидаемые ответы до тех пор, пока не истечет время ожидания чтения, а затем будет две записи для первого неудачного тестового URL и ничего после него. Сетевое подключение просто перестает работать после этого момента.
Когда я выполняю docker-compose up
на моей локальной машине тесты проходят, и все розы. Когда я пытаюсь запустить ту же команду с тем же docker-compose.yml на одном из моих агентов CI, мы сталкиваемся с указанной выше проблемой - ~ 10000 успешных тестов, а затем таймаут чтения между контейнерами.
До сих пор я пытался переопределить тест, чтобы все запросы не попадали в nginx в течение 10 секунд (например, задержка 0,05 секунды между каждым запросом или задержка в 1 секунду каждые 100 запросов и т. Д.) ... Я ожидал этого может дать докеру время для повторного использования некоторых соединений, но все, что он сделал, - это заставил сборку занять больше времени, чтобы выйти из строя в той же точке. Я также убедился, что последняя версия докера работает на моих агентах CI (18.09), так как я видел некоторые проблемы с github, описывающие проблемы, похожие на мои, и были решены путем обновления докера до текущей версии, а не в моем случае вроде.
Я просто не уверен, где искать дальше - обновив агенты CI до последней версии докера и несколько раз переопределив тест, у меня заканчиваются идеи о том, что может быть причиной этого. Это, безусловно, кажется связанным с докером, поскольку все работает нормально вне контекста докера, но журналы докера также не указывают на что-либо неожиданное.
Мои вопросы: кто-нибудь еще сталкивался с подобными вещами раньше? Куда мне дальше искать, чтобы найти первопричину этого?
Заранее спасибо.
Хорошо, оказывается, проблема в docker-composer, а именно в этой проблеме: https://github.com/docker/compose/issues/6018
Смог обойти проблему, направив весь вывод журнала nginx в / dev / null, а не на stdout / stderr