在Docker容器中检查mem_limit

在一个mem_limit太低的Docker容器崩溃之后,我如何检查容器的mem_limit这个容器? 我想在启动时打印一个错误消息,如果mem_limit设置为低,则退出。

内存限制是通过cgroups强制执行的。 因此,您需要使用cgget来查找给定cgroup的内存限制。

要testing这个,你可以运行一个内存限制的容器:

 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将容器的cgroup挂载到/sys/fs/cgroup (这可能会在将来的版本中改变)。 您可以使用以下方法检查限制:

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

在容器中为我工作,感谢塞巴斯蒂安的想法

 #!/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