У меня systemd работает внутри контейнера докеров, и я пытаюсь установить ограничение количества файловых дескрипторов для службы. Я установил ограничение для контейнера докеров на 262 КБ, но по какой-то причине процесс / sbin / init снижает предел до 65 КБ. Вот простой пример:
$ sudo docker run --rm --ulimit nofile=262144:262144 --entrypoint grep centos:7.6.1810 files /proc/1/limits
Max open files 262144 262144 files
$ sudo docker run -d --name test --ulimit nofile=26144:26144 --entrypoint /sbin/init centos:7.6.1810 && sudo docker exec test grep files /proc/1/limits && sudo docker rm -f test
cd9bbe479f4a5b5b4e78421bfc8ef968e5abd5d9703b7f1f1975998e65ab0145
Max open files 26144 26144 files
test
$ sudo docker run -d --name test --ulimit nofile=262144:262144 --entrypoint /sbin/init centos:7.6.1810 && sudo docker exec test grep files /proc/1/limits && sudo docker rm -f test
d5d115a0cc07994b9934a809ac567e3f75994f75e56f88740ccc8f08bcb15d1e
Max open files 65536 65536 files
test
В первой команде я запускаю простую команду grep, вы можете видеть, что она получает ограничение в 262 КБ, которое я установил для контейнера. Вторая команда Я запускаю процесс / sbin / init с лимитом 26 КБ, которому он следует. Если я устанавливаю предел> 65k (3-я команда), он игнорируется и вместо этого устанавливается значение 65k.
Поскольку процесс init является родительским для всех служб и устанавливает жесткое ограничение nofile равным 65 КБ, моя служба не может выйти за пределы 65 КБ (например, с параметром LimitNOFILE = для службы). Есть ли способ запретить init устанавливать более низкий предел nofile?
EDIT: третья команда дает ожидаемый результат на моей машине. Вышеуказанные выходные данные получены из экземпляра AWS EC2. Не уверен, почему это другое ...
Это работает, как ожидалось, с centos:7.7.1908
image, поэтому я думаю, что что-то было исправлено в systemd.