Tengo 2 contenedores definidos en un docker-compose.yml, y los estoy usando para ejecutar algunas pruebas rspec en una canalización de CI: el primer contenedor ejecuta las pruebas, el segundo es un contenedor nginx que está configurado para realizar redireccionamientos para muchas rutas diferentes... pero me encuentro con un comportamiento inesperado al ejecutarlos.
Las pruebas constan de aproximadamente ~12000 URL, y el primer contenedor realiza una solicitud GET al contenedor nginx para cada una de ellas, comprobando que redirige a la ubicación esperada.
La extrañeza ocurre cuando ~10000 de las URL se han verificado con éxito : el resto de las conexiones intentadas al contenedor nginx mueren con un tiempo de espera de lectura. Mirar los registros de nginx revela que no cree que nada esté mal; sirve las respuestas esperadas hasta los tiempos de espera de lectura, y luego habrá 2 entradas para la primera URL de prueba fallida, y nada después de ella. La conectividad de red simplemente deja de funcionar más allá de ese punto.
Cuando ejecuto docker-compose up
en mi máquina local, las pruebas pasan, y todo es rosas. Cuando intento ejecutar el mismo comando con el mismo docker-compose.yml en uno de mis agentes de CI, nos encontramos con el problema anterior: ~10000 éxitos de prueba y luego tiempo de espera de lectura entre los contenedores.
Hasta ahora, he intentado redefinir la prueba para que las solicitudes no lleguen a nginx en 10 segundos (por ejemplo, un retraso de 0,05 segundos entre cada solicitud, o un retraso de 1 segundo cada 100 solicitudes, etc.)... Esperaba que esto le diera tiempo a docker para reciclar algunas conexiones, pero todo lo que hizo fue hacer que la compilación tardara más en fallar en el mismo punto. También me aseguré de que la última versión de docker se ejecute en mis agentes de CI (18.09), ya que vi algunos problemas de github que describían lo que pensé que eran problemas similares a los míos, y se resolvieron actualizando docker a una versión actual, no en mi caso, parece.
Simplemente no estoy seguro de dónde buscar a continuación: después de actualizar los agentes de CI con la última ventana acoplable y redefinir la prueba varias veces, me estoy quedando sin ideas sobre qué podría estar causando esto. Ciertamente parece estar relacionado con docker, ya que las cosas funcionan bien fuera de un contexto de docker, pero los registros de docker tampoco parecen indicar nada inesperado.
Mis preguntas: ¿Alguien más se ha encontrado con este tipo de cosas antes? ¿Dónde debo buscar a continuación para encontrar la causa raíz de esto?
Gracias de antemano.