Ulimits в docker хост vs контейнер
Я не смог найти прямого ответа, на этот вопрос, но вот это:
скажем, что у меня есть хост, у которого есть max open files 1024:
[root@host]# ulimit -a
open files (-n) 1024
и контейнер docker, работающий на этом хосте с :
[root@container]# ulimit -a
open files (-n) 1048576
Итак, у меня будет проблема в контейнере, если я попытаюсь открыть более 1024 файлов? Я думаю, что реальный предел в этом случае для контейнера будет 1024 файла. Что ты думаешь?
2 ответов
реальный предел будет 1048576.
посмотрите на правую часть этого изображения, которая показывает, что контейнеры-это в основном изолированные процессы, работающие в одной операционной системе:
поскольку каждый системный вызов в контейнере будет обрабатываться непосредственно ОС хоста, отображаемый ulimit (1048576) поступает непосредственно из ОС хоста, и это значение будет использоваться.
разница в установки могли быть причинены конфигурация Докер, например.
(обратите внимание, что для VMs, это будет по-другому: гостевая ОС может отображать значение 1048576, но открытые вызовы в конце концов будут обрабатываться хост-ОС, которая наложит ограничение 1024)
хотя это немного поздно, я просто хочу, чтобы очистить сомнения о разнице в ulimit.
Если вы задаете значение net при запуске контейнера, значение ulimit, отображаемое в контейнере, поступает из хост-ОС. Вопрос в том, почему вы видите другое значение при выполнении той же команды с хоста?
это потому, что при запуске команды на хосте она показывает свой мягкий предел. С другой стороны, значение, которое контейнер показывает жесткий предел хост-ОС. Причина этого в том, что вам разрешено пересекать мягкий предел. В каком-то смысле. жесткий предел-это реальный предел. Вы можете найти больше о ulimit в этом ссылке.
чтобы увидеть жесткий предел, просто введите следующую команду
ulimit -Hn
вы увидите, что значения совпадают.
Б. Н. вы не можете пересечь жесткий предел, но вы можете увеличить его, если вы корень.