Docker容器在默认情况下会使用宿主机的所有CPU和内存资源,为了明确限制每一个Docker容器的运行资源,需按如下操作进行设置。
首先,执行:sudo docker info
,如果提示:“WARNING: No swap limit support”,表示系统未开启资源隔离支持。
解决办法:
1.编辑/etc/default/grub文件
2.找到GRUB_CMDLINE_LINUX=配置项,并追加“cgroup_enable=memory swapaccount=1”(注意:如果GRUB_CMDLINE_LINUX=内有内容,切记不可删除,只需在后面追加cgroup_enable=memory swapaccount=1并用空格和前面的内容分隔开。)
其次,在启动容器时指定参数限定CPU和内存资源:
--cpus=N : 限制CPU核数
-m or --memory=4096m :容器可使用最大内存为4g,单位可以为 b,k,m,g
--memory-swap=4096m :只有当--memory设置之后,--memory-swap 才会生效
例如:
sudo docker run -it --cpus=4 -m 4096M --memory-swap=4096M -v $(pwd)/config:/data/config ai-media-hub:latest /bin/sh
sh-4.2#
如何查看真正分配到的资源?
如上,启动并进入到Docker容器之后,如果是执行top命令,或者cat /proc/cpuinfo等方式查看容器本身的资源信息是行不通的,通过这些命令查看到的都是宿主机本身的信息。
使用如下命令查看Docker容器真正的资源信息:
1.查看内存大小
cat /sys/fs/cgroup/memory/memory.limit_in_bytes
4294967296
查询结果单位为字节,如上:Docker容器的内存大小为4GB。
2.查看CPU核数
expr `cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us` / `cat /sys/fs/cgroup/cpu/cpu.cfs_period_us`
4
如上:Docker容器分配的CPU核数为4。
【参考】
https://www.k2zone.cn/?p=2356 解决docker警告WARNING: No swap limit support
https://www.cnblogs.com/cptao/p/10936256.html docker内存限制
https://blog.csdn.net/hknaruto/article/details/107511106 Docker在容器中获取当前实例内存限制、CPU限制