Я запускаю веб-сервер, который обрабатывает много тысяч параллельных сетевых подключений. Чтобы это было возможно, на Debian linux (мое базовое изображение google/debian: wheezy, работающее на GCE), где по умолчанию для открытых файлов установлено значение 1000, я обычно просто устанавливаю ulimit на нужный номер (64 000),
Это отлично работает, за исключением того, что, когда я выполнил док-версию моего приложения и развернул его, я обнаружил, что тип докеров игнорирует ограничения. Я пробовал следующее (все на главной машине, а не на самом контейнере):
MAX=64000
sudo bash -c "echo \"* soft nofile $MAX\" >> /etc/security/limits.conf"
sudo bash -c "echo \"* hard nofile $MAX\" >> /etc/security/limits.conf"
sudo bash -c "echo \"ulimit -c $MAX\" >> /etc/profile"
ulimit -c $MAX
После ряда исследований я обнаружил, что люди смогли решить подобную проблему, выполнив следующие действия:
sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"
и перезагрузка/перезапуск службы докеров.
Однако все вышеперечисленное не работает: я получаю сообщение об ошибке "слишком много открытых файлов", когда мое приложение запускается внутри контейнера (выполнение ниже без докера решает проблему).
Я попытался запустить ulimit -a
внутри контейнера, чтобы получить указание, если работала установка ulimit, но при этом возникает ошибка, из-за которой ulimit не является исполняемым файлом, который является частью PATH.
Кто-нибудь столкнулся с этим и/или может предложить способ получить докер, чтобы узнать пределы?