После некоторых сбоев с контейнером докера со слишком низким mem_limit, как я могу проверить в контейнере mem_limit этого контейнера? Я хочу напечатать сообщение об ошибке при запуске и выйти, если mem_limit установлен на низкий.Проверьте mem_limit в контейнере докера
0
A
ответ
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
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
хмм, это, кажется, не работает. он всегда дает мне огромное значение в контейнере (9223372036854771712), который, я думаю, является общей памятью, доступной в системе. когда я смотрю снаружи на «статистику контейнера», ограничение 400 м, которое я применил сейчас, появляется. Так что все еще озадачен тем, как получить такое же значение внутри контейнера. Это контейнер centos, кстати, работающий на докере 1.13. – Mandragor
@Mandragor Вы также можете проверить '/ sys/fs/cgroup'. См. Мое обновление. Это также работает в centos. – Sebastian
cat /sys/fs/cgroup/memory/memory.limit_in_bytes возвращает 9223372036854771712. – Mandragor