docker在启动容器时出现cannot allocate memory的错误,是由于docker默认使用了cgroup的kmem accounting特性,这个特性在linux内核3下,存在bug,无法有效的进行回收;如果容器出现频繁的关闭/启动,就会使cgroup的可分配内存越来越少,直到最终耗尽。
解决的办法:
1、临时解决的办法是重启服务器。
2、永久解决的办法是:
(1)升级linux内核,
(2)禁用cgroup的kmem特性,
(3)重新编译k8s或docker的runc,不使用kmemtex。
详见博文:https://www.modb.pro/db/212312