LINUX.ORG.RU
ФорумAdmin

Ограничение на количество потоков (threads) в docker контейнерах

 


0

2

Подскажите, в docker контейнере получаю ошибку:

fork: retry: Resource temporarily unavailable

Гуглил про nprocs, на хосте добавил в /etc/security/limits.d/90-nproc.conf:

*          soft    nproc     8192
root       soft    nproc     unlimited

На хосте ограничение подросло, вижу:

$ ps aux -L |grep юзернейм |wc -l 
1190

В конфиге /etc/init/docker.conf:

limit nproc unlimited unlimited

Где мне ещё посмотреть? Приложение в докере запускаю через docker-compose, в каждом контейнере приложение форкается примерно на 500 процессов, соответственно, уже на втором контейнере получаю ошибку. Все контейнеры запускаются на основе одного базового образа, в котором в /etc/security/limits.d/90-nproc.conf прописано:

*          soft    nproc     1024
root       soft    nproc     unlimited

Но в индивидуальном контейнере меньше этого количества потоков создаётся. Но пользователь (uid) один и тот же, сессии с ним создаются внутри контейнеров с помощью su или sshd.

Мне нужно ещё и внутри контейнера лимит nproc поднимать - ограничения как-то шарятся между ними через ядро или сам докер?

Как можно узнать текущее ограничение с учётом nproc? ulimit -u - что-то не то показывало - «unlimited» - в случае дефолтного-отсутствующего в /etc/security/limits.d/90-nproc.conf лимита nproc...

Пересобрал базовый образ для моих контейнеров с хостовым /etc/security/limits.d/90-nproc.conf:

*          soft    nproc     8192
root       soft    nproc     unlimited

и всё заработало.

Только люди, знающие что произошло, всё равно кастуются сюда:

Как это работает - я могу в любом контейнере установить какой-нибудь небольшой лимит и таким образом задосить совершенно посторонний контейнер? А как с этим борются в каком-нибудь kubernetes, который часто позиционируется как замена виртуализации для хостинга?

Есть конечно, возможность, что докер кэширует значение системного nproc где-то в остановленных контейнерах. Т.к. более жёсткое ограничение оставалось, когда я увеличил хостовый лимит и перезагрузился, но я при этом не переубивал остановленные контейнеры, перезапустив их потом через docker-compose start.

allter149
() автор топика
Ответ на: комментарий от allter149

P.S. Docker version 17.03.2-ce, может в более новых эту проблему как-то отдельно решили?

allter149
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.