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é.
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, etdocker-compose
ou docker
bibliothèquesJ'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.
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/