web-dev-qa-db-fra.com

Ulimits dans Docker Host vs conteneur

Je n'ai pas pu trouver de réponse directe à cette question, mais la voici:

Disons que j'ai un hôte qui a max 1024 fichiers ouverts:

[root@Host]# ulimit -a
open files                      (-n) 1024

et un conteneur Docker exécuté sur cet hôte avec:

[root@container]# ulimit -a
open files                      (-n) 1048576

Est-ce que j'aurai un problème dans le conteneur si j'essaye d'ouvrir plus de 1024 fichiers? Je pense que la vraie limite dans ce cas pour le conteneur sera de 1024 fichiers. Qu'est-ce que tu penses?

18
os11k

Bien que ce soit un peu tard, je veux juste effacer les doutes sur la différence d'ulimit.

Si vous définissez la valeur net lors de l'exécution du conteneur, la valeur ulimit affichée dans le conteneur provient du système d'exploitation hôte. La question est alors pourquoi voyez-vous une valeur différente lorsque vous exécutez la même commande à partir de l'hôte?

En effet, lors de l'exécution de la commande dans l'hôte, elle affiche sa limite logicielle. D'un autre côté, la valeur affichée par le conteneur est la limite stricte du système d'exploitation hôte. La raison en est que vous êtes autorisé à franchir la limite souple. Donc, dans un sens, la limite stricte est en fait la vraie limite. Vous pouvez en savoir plus sur ulimit dans ce lien .

Pour voir la limite stricte, tapez simplement la commande suivante

ulimit -Hn

Vous verrez que les valeurs correspondent.

N.B. Vous ne pouvez pas franchir la limite dure mais vous pouvez l'augmenter si vous êtes la racine.

11
Alim Ul Gias

La vraie limite sera 1048576.

Jetez un coup d'œil à la partie droite de cette image, qui montre que les conteneurs sont essentiellement des processus isolés, exécutés sur le même système d'exploitation:

Containers vs. VMs

Étant donné que chaque appel système dans le conteneur sera géré directement par le système d'exploitation hôte, l'ulimit affiché (1048576) provient directement du système d'exploitation hôte et c'est la valeur qui sera utilisée.

La différence dans les ulimits pourrait avoir été causée par ne configuration Docker , par exemple.

(Notez que pour les machines virtuelles , ce sera différent: le système d'exploitation invité peut afficher une valeur de 1048576, mais les appels ouverts seront finalement traités par l'OS hôte, qui imposera la limite de 1024)

11
user3151902