web-dev-qa-db-fra.com

comment définir ulimit / descripteur de fichier sur le conteneur docker la balise d'image est phusion / baseimage-docker

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é:

  • edit limits.conf le conteneur ignore ce fichier
  • la procédure de démarrage a été trouvée sur https://coderwall.com/p/myodcq mais cette image de menu fixe a un type de processus d'initialisation différent. (exécuter)
  • J'ai essayé de modifier la configuration de la bibliothèque pam 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
34
dnocode

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

41
Glenn

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.

  1. Retirer sys_resource de lxc_template.go et docker de recompilation. Vous pourrez alors régler l’ulimit aussi haut que vous le souhaitez.

ou

  1. Arrêtez le démon docker. Modifiez les paramètres ulimit sur l'hôte. Démarrez le démon docker. Il a maintenant vos limites révisées, ainsi que ses processus enfants.

J'ai appliqué la deuxième méthode:

  1. Sudo service docker stop;

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

  3. redémarrer la machine

  4. lancer mon conteneur

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

26
dnocode

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
7
Kabeer Ahmed

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
4
orcaman

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
3
Jay

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é

1
Rifhan Akram

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.

0
neofreko