Docker Ignore les limites.conf (en essayant de résoudre “trop de fichiers ouverts” d'erreur)
Je fais tourner un serveur web qui est la gestion de plusieurs milliers de connexions simultanées web connexions socket. Pour que cela soit possible, sur Debian linux (mon image de base est google/debian:wheezy, en cours d'exécution sur GCE), où la valeur par défaut du nombre de fichiers ouverts est fixé à 1000, j'ai l'habitude de simplement définir l'espace pour le nombre désiré (de 64 000).
Cela fonctionne très bien, sauf que quand je dockerized ma demande et déployé - j'ai découvert que le panneau type de ignore la limite des définitions. J'ai essayé ce qui suit (sur la machine hôte, et non sur le contenant lui-même):
MAX=64000
sudo bash -c "echo \"* soft nofile $MAX\" >> /etc/security/limits.conf"
sudo bash -c "echo \"* hard nofile $MAX\" >> /etc/security/limits.conf"
sudo bash -c "echo \"ulimit -c $MAX\" >> /etc/profile"
ulimit -c $MAX
Après avoir fait quelques recherches, j'ai trouvé que les gens étaient en mesure de résoudre un problème similaire en faisant ceci:
sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"
et redémarrage /redémarrage du panneau de service.
Cependant, tous les ci-dessus échouent: je suis le "trop de fichiers ouverts" erreur lors de mon application s'exécute à l'intérieur du conteneur (faire ce qui suit sans docker permet de résoudre le problème).
J'ai essayé d'exécuter ulimit -a
à l'intérieur du conteneur pour obtenir une indication si l'espace le programme d'installation a fonctionné, mais cela déclenche une erreur sur ulimit ne pas être un fichier exécutable qui est une partie du CHEMIN.
Quelqu'un a couru dans tout cela, et/ou peut vous suggérer un moyen pour obtenir le panneau de recognzie les limites?
OriginalL'auteur orcaman | 2014-10-16
Vous devez vous connecter pour publier un commentaire.
J'ai pu mitgiate ce problème avec la configuration suivante :
J'ai utilisé ubuntu 14.04 linux pour le menu fixe de la machine et la machine hôte.
Sur le hôte machine, Vous devez :
* - nofile 64000
fs.file-max = 64000
OriginalL'auteur Eran Chetzroni
Vous pouvez passer à la limite comme argument lors de l'exécution du conteneur. De cette façon, vous n'avez pas à modifier l'hôte de ses limites et de donner trop de pouvoir dans le récipient. Voici comment:
OriginalL'auteur mtyurt
Avec docker-composer, vous pouvez configurer ulimits.
https://docs.docker.com/compose/compose-file/#ulimits
Vous pouvez ajouter mou/dur les limites d'une cartographie.
Bien que n'étant pas idéal, vous pourriez exécuter conteneur privilégiée avec les option (Surtout pour un rapide non-solution optimale pour un environnement de Dev, pas recommandé si la sécurité est un sujet de préoccupation).
Voir:
https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
OriginalL'auteur lvolmar