2017-02-12 9 views
0

После некоторых сбоев с контейнером докера со слишком низким mem_limit, как я могу проверить в контейнере mem_limit этого контейнера? Я хочу напечатать сообщение об ошибке при запуске и выйти, если mem_limit установлен на низкий.Проверьте mem_limit в контейнере докера

ответ

2

Предел памяти применяется через группы. Поэтому вам нужно использовать cgget, чтобы узнать предел памяти данной группы.

Чтобы проверить это, вы можете запустить контейнер с лимитом памяти:

docker run --memory 512m --rm -it ubuntu bash 

Запустить в контейнере:

apt-get update 
apt-get install cgroup-bin 
cgget -n --values-only --variable memory.limit_in_bytes/
# will report 536870912 

Docker 1.13 монтирует контрольная группа контейнера для /sys/fs/cgroup (это может измениться в будущие версии). Вы можете проверить предел с помощью:

cat /sys/fs/cgroup/memory/memory.limit_in_bytes 
+0

хмм, это, кажется, не работает. он всегда дает мне огромное значение в контейнере (9223372036854771712), который, я думаю, является общей памятью, доступной в системе. когда я смотрю снаружи на «статистику контейнера», ограничение 400 м, которое я применил сейчас, появляется. Так что все еще озадачен тем, как получить такое же значение внутри контейнера. Это контейнер centos, кстати, работающий на докере 1.13. – Mandragor

+0

@Mandragor Вы также можете проверить '/ sys/fs/cgroup'. См. Мое обновление. Это также работает в centos. – Sebastian

+0

cat /sys/fs/cgroup/memory/memory.limit_in_bytes возвращает 9223372036854771712. – Mandragor

1

работал для меня в контейнере, спасибо за идеи Себастьян

#!/bin/sh 
MEM_LIMIT=$(cat /proc/self/cgroup|\ 
awk -F: '{ print $2":"$3}'|\ 
grep ^memory:|\ 
awk -F: '{print "/sys/fs/cgroup/memory"$2"/memory.limit_in_bytes"}' 
) 

MEM=$(cat "$MEM_LIMIT") 

if [[ $MEM < 419430400 ]]; then 
    echo "Memory limit was set too small. Minimum 400m." 
    exit 1 
fi 

 Смежные вопросы

  • Нет связанных вопросов^_^