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
31
demandé sur Tshepang 2014-06-20 05:08:06

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

30
répondu Glenn 2015-07-17 11:06:20

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.

  1. Supprimer sys_resourcelxc_template.go et recompiler docker. Puis vous pourrez régler l'ulimit aussi haut que vous le voulez.

ou

  1. 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:

  1. sudo service docker stop;

  2. changé les limites dans / etc/security / limits.conf

  3. redémarrez la machine

  4. exécuter mon conteneur

  5. 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

24
répondu dnocode 2016-09-13 02:54:35

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
6
répondu Kabeer Ahmed 2018-01-29 09:25:27

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
4
répondu orcaman 2018-01-29 09:27:13

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
2
répondu Jay 2015-02-20 20:29:34

pour boot2docker, on peut le mettre sur /var/lib/boot2docker/profile par exemple:

ulimit -n 2018

attention de ne pas fixer cette limite trop haut car cela ralentira apt-get! Voir le bug #1332440. J'en ai assez de debian jessie.

0
répondu neofreko 2015-03-06 06:02:29

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é

0
répondu Rifhan Akram 2017-12-19 05:46:44