Je dois définir correctement la limite de descripteur de fichier sur le conteneur de menu fixe que je connecte à un conteneur avec ssh ( https://github.com/phusion/baseimage-docker )
Déjà essayé:
La sortie est toujours la même.
bash: ulimit: open files: cannot modify limit: Operation not permitted
Le dernier menu fixe permet de définir ulimits via la ligne de commande et l'API. Par exemple, docker run
prend --ulimit <type>=<soft>:<hard>
et il peut y en avoir autant que vous voulez. Donc, pour votre nofile, un exemple serait --ulimit nofile=262144:262144
Après quelques recherches, j'ai trouvé ceci dans une discussion de groupe de Google:
le menu fixe inhibe actuellement cette capacité pour une sécurité accrue.
En effet, les paramètres ulimit du système hôte s'appliquent au conteneur de menu fixe. Il est considéré comme un risque de sécurité que les programmes exécutés dans un conteneur puissent modifier les paramètres ulimit de l'hôte.
La bonne nouvelle est que vous avez le choix entre deux solutions différentes.
sys_resource
de lxc_template.go
et docker de recompilation. Vous pourrez alors régler l’ulimit aussi haut que vous le souhaitez.ou
J'ai appliqué la deuxième méthode:
Sudo service docker stop;
changé les limites dans /etc/security/limits.conf
redémarrer la machine
lancer mon conteneur
courir ulimit -a
dans le conteneur pour confirmer que la limite de fichiers ouverts a été héritée.
Voir: https://groups.google.com/forum/#!searchin/docker-user/limits/docker-user/T45Kc9vD804/v8J_N4gLbacJ
J'ai essayé de nombreuses options et je ne savais pas pourquoi certaines des solutions suggérées ci-dessus fonctionnaient sur une machine et non sur d'autres.
Une solution qui fonctionne, qui est simple et peut fonctionner par conteneur est la suivante:
docker run --ulimit memlock=819200000:819200000 -h <docker_Host_name> --name=current -v /home/user_home:/user_home -i -d -t docker_user_name/image_name
En fait, j'ai essayé la réponse ci-dessus, mais cela ne semblait pas fonctionner.
Pour que mes conteneurs reconnaissent le changement ulimit
, j'ai dû mettre à jour le docker.conf
fichier avant de les démarrer:
$ Sudo service docker stop
$ Sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"
$ Sudo service docker start
Voici ce que j'ai fait.
set ulimit -n 32000
dans le fichier /etc/init.d/docker
et redémarrez le service Docker
docker run -ti node:latest /bin/bash
lancez cette commande pour vérifier
user@4d04d06d5022:/# ulimit -a
devrait voir cela dans le résultat
open files (-n) 32000
[user@ip ec2-user]# docker run -ti node /bin/bash
user@4d04d06d5022:/# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 58729
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 32000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 58729
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Le docker run
la commande a un --ulimit
drapeau vous pouvez utiliser cet indicateur pour définir la limite de fichiers ouverts dans votre conteneur Docker.
Exécutez la commande suivante lors de la rotation de votre conteneur pour définir la limite de fichiers ouverts.
docker run --ulimit nofile=<softlimit>:<hardlimit>
la première valeur avant les deux points indique la limite de fichier logiciel et la valeur après les deux points indique la limite de fichier matériel. vous pouvez le vérifier en exécutant votre conteneur en mode interactif et en exécutant la commande suivante dans vos conteneurs Shell ulimit -n
PS: consultez ceci blog post pour plus de clarté
Pour boot2docker, nous pouvons le configurer sur /var/lib/boot2docker/profile
, par exemple:
ulimit -n 2018
Soyez averti de ne pas définir cette limite trop haut car cela ralentira apt-get! Voir bug # 133244 . Je l'ai eu avec Debian Jessie.