J'ai 2 conteneurs définis dans un fichier docker-compose.yml, et je les utilise pour exécuter des tests rspec dans un pipeline CI - le premier conteneur exécute les tests, le second est un conteneur nginx qui est configuré pour effectuer des redirections pour de nombreux chemins différents... mais je rencontre un comportement inattendu lors de leur exécution.
Les tests consistent en environ 12000 URLs, et le premier conteneur effectue une requête GET au conteneur nginx pour chacune d'entre elles, en vérifiant qu'elle redirige bien vers l'emplacement attendu.
L'étrangeté survient lorsque ~10000 des URL ont été vérifiées avec succès - les autres tentatives de connexion au conteneur nginx meurent avec un délai d'attente de lecture. En regardant les journaux de nginx, on s'aperçoit qu'il pense que tout va bien ; il fournit les réponses attendues jusqu'à l'expiration du délai de lecture, puis il y a deux entrées pour la première URL de test qui a échoué, et plus rien ensuite. La connectivité réseau ne fonctionne plus au-delà de ce point.
Lorsque j'exécute docker-compose up
sur ma machine locale, les tests passent et tout est rose. Lorsque j'essaie d'exécuter la même commande avec le même docker-compose.yml sur l'un de mes agents CI, nous rencontrons le problème ci-dessus - ~10000 tests réussis, et ensuite un délai de lecture entre les conteneurs.
Jusqu'à présent, j'ai essayé de redéfinir le test de façon à ce que les requêtes n'atteignent pas toutes nginx dans les 10 secondes (par exemple, un délai de 0,05 seconde entre chaque requête, ou un délai de 1 seconde toutes les 100 requêtes, etc)... Je m'attendais à ce que cela donne à docker le temps de recycler certaines connexions, mais tout ce que cela a fait, c'est que la construction prend plus de temps pour échouer au même point. Je me suis également assuré que la dernière version de docker tourne sur mes agents CI (18.09), car j'ai vu quelques problèmes github décrivant ce que je pensais être des problèmes similaires aux miens, et qui ont été résolus par la mise à jour de docker vers une version plus récente - pas dans mon cas, semble-t-il.
Je ne sais tout simplement pas où chercher - après avoir mis à jour les agents CI avec le dernier docker, et redéfini le test plusieurs fois, je suis à court d'idées sur ce qui pourrait être la cause de ce problème. Cela semble certainement lié à docker, puisque les choses fonctionnent bien en dehors d'un contexte docker, mais les journaux de docker ne semblent pas indiquer quelque chose d'inattendu non plus.
Mes questions : quelqu'un a-t-il déjà rencontré ce genre de problème ? Où dois-je chercher la cause première de ce problème ?
Merci d'avance.