Подтвердить что ты не робот

Как установить ulimit/файловый дескриптор на контейнере докера, тег изображения - phusion/baseimage-docker

Мне нужно установить лимит дескриптора файла правильно в контейнере докера Я подключаюсь к контейнеру с помощью ssh (https://github.com/phusion/baseimage-docker)

Уже пробовал:

  • edit limits.conf, контейнер игнорирует этот файл
  • процедура выскочки, найденная в https://coderwall.com/p/myodcq, но это изображение докеры имеет другой процесс инициализации. (Runit)
  • Я попытался изменить конфигурацию библиотеки pam в файле /etc/pam.d
  • попробуйте включить pam для ssh в sshd_config

Выход всегда одинаковый.

bash: ulimit: open files: cannot modify limit: Operation not permitted
4b9b3361

Ответ 1

Последний докер поддерживает установку ulimits через командную строку и API. Например, docker run принимает --ulimit <type>=<soft>:<hard>, и может быть столько, сколько вам нравится. Итак, для вашего nofile примером будет --ulimit nofile=262144:262144

Ответ 2

После некоторых поисков я нашел это в обсуждении групп Google:

docker в настоящее время запрещает эту возможность для повышения безопасности.

Это потому, что настройки ulimit для основной системы применяются к контейнеру докера. Это считается угрозой безопасности, что программы, запущенные в контейнере, могут изменять настройки ulimit для хоста.

Хорошей новостью является то, что у вас есть два разных решения.

  • Удалите sys_resource из lxc_template.go и перекомпилируйте докеры. затем вы сможете установить ulimit как можно выше.

или

  1. Остановите демон докеров. Измените настройки ulimit на хосте. Начало демон докеров. Теперь у вас есть свои пересмотренные лимиты, а его ребенок процессов.

Я применил второй метод:

  • sudo service docker stop;

  • изменил пределы в /etc/security/limits.conf

  • перезагрузите компьютер.

  • запустите мой контейнер

  • запустите ulimit -a в контейнере, чтобы подтвердить, что предел открытых файлов был унаследован.

Смотрите: https://groups.google.com/forum/#!searchin/docker-user/limits/docker-user/T45Kc9vD804/v8J_N4gLbacJ

Ответ 3

Я перепробовал множество вариантов и не уверен, почему несколько предложенных выше решений работают на одной машине, а не на других.

Решение, которое работает и является простым и может работать для каждого контейнера:

docker run --ulimit memlock=819200000:819200000 -h <docker_host_name> --name=current -v /home/user_home:/user_home -i -d -t docker_user_name/image_name

Ответ 4

На самом деле, я попробовал вышеуказанный ответ, но, похоже, он не работает.

Чтобы мои контейнеры могли подтвердить изменение ulimit, мне пришлось обновить файл docker.conf перед их запуском:

$ sudo service docker stop
$ sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"
$ sudo service docker start

Ответ 5

Вот что я сделал.

набор ulimit -n 32000 в файле /etc/init.d/docker

и перезапустите службу докеров

docker run -ti node:latest /bin/bash

запустите эту команду, чтобы проверить

[email protected]:/# ulimit -a

должен видеть это в результате

open files (-n) 32000

[[email protected] ec2-user]# docker run -ti node /bin/bash
[email protected]:/# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 58729
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 32000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 58729
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Ответ 6

Команда docker run имеет флаг --ulimit, вы можете использовать этот флаг, чтобы установить ограничение на открытие файла в контейнере докера.

Запустите следующую команду, когда вы вращаете свой контейнер, чтобы установить ограничение на открытый файл.

docker run --ulimit nofile=<softlimit>:<hardlimit> первое значение перед двоеточием указывает ограничение на мягкий файл и значение после того, как двоеточие указывает ограничение жесткого файла. вы можете проверить это, запустив контейнер в интерактивном режиме и выполнив следующую команду в вашей оболочке контейнеров ulimit -n

PS: ознакомьтесь с этим blog для большей ясности

Ответ 7

При использовании файла docker-compose, На основе докера составьте версию 2.x Мы можем установить, как показано ниже, переопределив конфигурацию по умолчанию.

ulimits:
  nproc: 65535
  nofile:
    soft: 26677
    hard: 46677

https://docs.docker.com/compose/compose-file/

Ответ 8

Для boot2docker мы можем установить его на /var/lib/boot2docker/profile, например:

ulimit -n 2018

Будьте осторожны, чтобы не устанавливать этот предел слишком высоко, поскольку он замедлит apt-get! См. Сообщение об ошибке # 1332440. У меня было это с debian jessie.