comment configurer ulimit / descripteur de fichier sur le conteneur docker l'étiquette d'image est phusion / baseimage-docker
je dois définir la limite du descripteur de fichier correctement sur le conteneur docker - Je me connecter à conteneur avec ssh (https://github.com/phusion/baseimage-docker)
Déjà essayé:
- modifier les limites.conf le conteneur ignorer ce fichier
- procédure de démarrage trouvée à https://coderwall.com/p/myodcq mais cette image docker a un processus d'initialisation différent. (runit)
- j'ai essayé de modifier la configuration de pam bibliothèque dans /etc/pam.d
- essayez d'activer pam pour SSH dans sshd_config
la sortie est toujours la même.
bash: ulimit: open files: cannot modify limit: Operation not permitted
7 réponses
le dernier docker prend en charge le paramétrage des ulimits à travers la ligne de commande et L'API. Par exemple, docker run
faut --ulimit <type>=<soft>:<hard>
et il peut y en avoir autant que vous voulez. Donc, pour votre nofile, un exemple serait le --ulimit nofile=262144:262144
après quelques recherches j'ai trouvé ceci sur une discussion de groupes de Google:
docker inhibe actuellement cette capacité pour une sécurité accrue.
c'est parce que les paramètres ulimit du système hôte s'appliquent au conteneur docker. Il est considéré comme un risque de sécurité que des programmes tournant dans un conteneur puissent modifier les paramètres ulimit de l'hôte.
La bonne nouvelle, c'est que vous avez deux solutions différentes à choisir de.
- Supprimer
sys_resource
lxc_template.go
et recompiler docker. Puis vous pourrez régler l'ulimit aussi haut que vous le voulez.
ou
- arrêtez le démon docker. Changez les paramètres ulimit de l'hôte. Commencer le démon docker. Il a maintenant vos limites révisées, et son enfant les processus ainsi.
j'ai appliqué la deuxième méthode:
sudo service docker stop;
changé les limites dans / etc/security / limits.conf
redémarrez la machine
exécuter mon conteneur
exécuter
ulimit -a
dans le conteneur pour confirmer les fichiers ouverts limite a été hérité.
Voir: https://groups.google.com/forum/#!searchin/docker-user/limits/docker-user/T45Kc9vD804/v8J_N4gLbacJ
j'ai essayé beaucoup d'options et je ne sais pas pourquoi quelques solutions suggérées ci-dessus fonctionnent sur une machine et pas sur d'autres.
Une solution qui fonctionne et qui est simple et permet de travailler par conteneur:
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 elle n'a pas semblé fonctionner.
pour obtenir mes conteneurs pour reconnaître le ulimit
changer, j'ai eu à mettre à jour l' docker.conf
le fichier avant de commencer:
$ 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.
définir
ulimit -n 32000
dans le fichier /etc/init.d / docker
et redémarrez le service docker
docker run -ti node:latest /bin/bash
exécuter cette commande pour vérifier
user@4d04d06d5022:/# ulimit -a
devriez voir ceci 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
docker run
commande --ulimit
flag vous pouvez utiliser ce flag pour définir la limite du fichier ouvert dans votre conteneur docker.
exécutez la commande suivante lors de la rotation de votre conteneur pour définir la limite du fichier ouvert.
docker run --ulimit nofile=<softlimit>:<hardlimit>
la première valeur avant le deux-points indique la limite du fichier mou et la valeur après le deux-points indique la limite du fichier dur. vous pouvez vérifier cela en lançant votre conteneur en mode interactif et en exécutant la commande suivante dans votre conteneurs shell ulimit -n
PS: découvrez cette blog post pour plus de clarté