Conexões TCP entre o tempo limite dos contêineres do docker após ~ 10000 conexões

Eu tenho 2 contêineres definidos em um Docker-compose.yml, e estou usando-os para executar alguns testes rspec em um pipeline de CI - o primeiro contêiner executa os testes, o segundo é um contêiner nginx configurado para executar redirecionamentos para muitos caminhos diferentes... mas estou tendo algum comportamento inesperado ao executá-los.

Os testes consistem em aproximadamente ~ 12000 URLs, e o primeiro contêiner executa uma solicitação GET para o contêiner nginx para cada um deles, verificando se ele redireciona para o local esperado.

A estranheza ocorre quando ~10000 das URL's foram verificadas com sucesso - o restante das conexões tentadas ao contêiner nginx morre com um tempo limite de leitura. Olhando para os logs nginx revela que acha que nada está errado; ele serve as respostas esperadas até os tempos limite de leitura, e então haverá 2 entradas para o primeiro URL de teste com falha, e nada depois disso. A conectividade de rede simplesmente deixa de funcionar mais além desse ponto.

Quando executo docker-compose up na minha máquina local, os testes passam, e tudo é rosas. Quando tento executar o mesmo comando com o mesmo docker-compose.yml em um dos meus agentes de CI, encontramos o problema acima - ~10000 sucessos de teste e, em seguida, tempo limite de leitura entre os contêineres.

Até agora, tentei redefinir o teste para que as solicitações não atingissem o nginx em 10 segundos (por exemplo, um atraso de 0,05 segundos entre cada solicitação ou um atraso de 1 segundo a cada 100 solicitações, etc)... Eu esperava que isso pudesse dar tempo ao docker para reciclar algumas conexões, mas tudo o que ele fez foi fazer com que a construção demorasse mais para falhar no mesmo ponto. Também me certifiquei de que a versão mais recente do docker esteja sendo executada em meus agentes CI (18.09), pois vi alguns problemas do github descrevendo o que pensei serem problemas semelhantes aos meus e foram resolvidos atualizando o docker para uma versão atual - não no meu caso, parece.

Simplesmente não tenho certeza de onde procurar a seguir - tendo atualizado os agentes de CI com o docker mais recente e redefinindo o teste várias vezes, estou ficando sem ideias sobre o que poderia estar causando isso. Certamente parece relacionado ao docker, já que as coisas funcionam bem fora de um contexto do docker, mas os logs do docker também não parecem indicar nada inesperado.

Minhas perguntas: alguém mais encontrou esse tipo de coisa antes? Onde devo procurar ao lado para encontrar a causa raiz disso?

Obrigado antecipadamente.

OK, então acontece que o problema é com docker-composer, especificamente esse problema: https://github.com/docker/compose/issues/6018

Foi capaz de contornar o problema direcionando toda a saída de log do nginx para /dev / null em vez de stdout / stderr