Docker容器中的内存限制和CPU限制

pyt*_*lus 10 linux containers linux-kernel cgroups docker

更新:

在关于此主题的stackoverflow上发现了很多问题和讨论。尽管它们被标记为已接受答案,并已被成千上万的用户开始使用,但在这里似乎并不是正确的答案。


我运行了一个具有资源限制的docker(版本1.13.1,版本092cba3)容器,如下所示:

docker run --privileged -v /sys/fs/cgroup:/sys/fs/cgroup -m 4096M --cpuset-cpus='0' --cpus=1 --cpu-shares=256 -p $IMAGE_NAME
Run Code Online (Sandbox Code Playgroud)

主机系统(RHEL 7)具有4核和8G内存。基本上,我想限制容器的可用内存和CPU。成功启动容器后,我打开了bash并尝试从容器内查找限制信息。但是我无法获得正确的信息。

我尝试了这个:

sudo cat /proc/meminfo
Run Code Online (Sandbox Code Playgroud)

结果是:

主机系统 内存总数:8008812 kB内存可用量:7416404 kB内存可用量:7537332 kB
Docker容器 内存总量:8008812 kB内存可用量:7318052 kB内存可用量:7498764 kB

同样,我想获得CPU限制:

grep -c ^processor /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)

结果是:

主机系统 4
Docker映像 4

似乎容器不可见由容器强制执行的CPU和内存限制。我也尝试查询cgroup信息。

mkdir -p /tmp/memory
mount -n -t cgroup -o memory cgroup /tmp/memory
Run Code Online (Sandbox Code Playgroud)

然后我看一下cgroup文件:

[root@engrlab memory]# cat /tmp/memory/memory.limit_in_bytes
9223372036854771712
Run Code Online (Sandbox Code Playgroud)

该数字大于主机系统的实际内存。

有没有办法验证是否在容器中正确设置了资源约束?如何从容器中找到资源约束信息?感谢任何建议。

小智 6

我在我的 docker 主机上尝试这个命令,它正在工作

docker run -it -d -m 100M --cpuset-cpus='0' --cpus=1 --cpu-shares=256 --name testing ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)

码头统计测试


pyt*_*lus 4

更新

这是有效的答案:https ://stackoverflow.com/a/41827812/3209177


我刚刚找到这个答案:

限制 docker 容器上的内存不起作用

我将尝试一下,然后带着我的观察回来。