web-dev-qa-db-fra.com

pool de connexions de redémarrage Docker-compose plein

Mon équipe et moi convertissons une partie de notre infrastructure en docker à l'aide de docker-compose. Tout semble fonctionner très bien, le seul problème que j'ai est de redémarrer, cela me donne un pool de connexion est une erreur complète. J'essaie de comprendre ce qui cause cela. Si je retire 2 conteneurs ou (1 installation complète) cela fonctionne très bien.

Un peu d'histoire sur ce que j'essaie de faire. Il s'agit d'une Ruby on Rails application qui est exécutée avec plusieurs configurations différentes pour différentes équipes au sein d'une organisation. Au total, le serveur exécute 14 conteneurs différents. Le système d'exploitation du serveur hôte est CentOS et la commande compose est exécutée à partir d'un MacBook Pro sur le même réseau. J'ai également essayé cela avec un boot2docker VM avec le même résultat.

Voici la sortie détaillée de la commande (en utilisant le boot2docker vm) https://Gist.github.com/rebelweb/5e6dfe34ec3e8dbb8f02c0755991ef11

Toute aide ou pointeur est apprécié.

8
Ryan Condron

J'ai également rencontré des difficultés avec ce message d'erreur avec mon environnement de développement qui utilise plus de dix conteneurs exécutés via docker-compose.

WARNING: Connection pool is full, discarding connection: localhost

Je pense avoir découvert la cause première de ce problème. La bibliothèque python requests gère un pool de connexions HTTP que la bibliothèque docker utilise pour parler à l'API docker et, vraisemblablement, aux conteneurs eux-mêmes. C'est mon hypothèse que seuls ceux d'entre nous qui utilisent docker-compose avec plus de 10 conteneurs le verront jamais. Le problème est double.

  • requests définit par défaut sa taille de pool de connexions à 10, et
  • il ne semble pas y avoir de moyen d'injecter une plus grande taille de pool à partir du docker-compose ou docker bibliothèques

J'ai piraté ensemble une solution. Mes bibliothèques pour requests étaient situées dans ~/.local/lib/python2.7/site-packages. J'ai trouvé requests/adapters.py et changé DEFAULT_POOLSIZE de 10 à 1000.

Ce n'est pas une solution de production, est assez obscur et ne survivra pas à une mise à niveau de package.

10
Squirrelsama

Vous pouvez essayer de réinitialiser le pool de réseaux avant le déploiement

$ docker network Prune

Docks ici: https://docs.docker.com/engine/reference/commandline/network_Prune/

1
andriy-baran