Контейнер Docker не наследует ulimit от хоста

Я прочитал здесь, что docker контейнеры наследуют ulimit свойств хоста. Это, кажется, не происходит для моих контейнеров. В частности, мне нужно, чтобы свойство max locked memory наследовалось от хоста. Кто-нибудь знает, как это исправить?

ubuntu@host:~$ 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) 31404
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 50000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 50000
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
ubuntu@host:~$ docker exec -it container /bin/bash
root@container:/# 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) 31404
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 524288
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 524288
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

person lingxiao    schedule 30.03.2016    source источник
comment
Какую версию сервера и клиента docker вы используете? Какая хостовая ОС?   -  person Nathaniel Waisbrot    schedule 30.03.2016
comment
основная ОС — Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-66-универсальная x86_64)   -  person lingxiao    schedule 30.03.2016


Ответы (1)


Если вы хотите установить собственные ulimits для контейнера, вы можете использовать параметр --ulimit. Например;

docker run -it --rm --ulimit memlock=32768:32768 ubuntu sh -c "ulimit -a"

Показывает:

time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         unlimited
stack(kbytes)        8192
coredump(blocks)     0
memory(kbytes)       unlimited
locked memory(kbytes) 32
process              7873
nofiles              1024
vmemory(kbytes)      unlimited
locks                unlimited

Вы можете найти больше информации в документации; https://docs.docker.com/engine/reference/commandline/run/

Другие способы ограничения ресурсов для контейнера также см. в этом разделе; https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources

person thaJeztah    schedule 30.03.2016