有时候docker要对容器使用的内存做出限制,通常的做法是使用参数 -m
例如:
docker run -m 512M
表示容器内存最大不能超过512M。
但这样做,在ubuntu会看到以下警告
WARNING: Your kernel does not support swap limit capabilities
docker官方文档给出了解决方案
就是修改grub配置,添加GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
就可以了。
重点的地方不是这里,是说一下grub的3个配置路径,因为我在修改grub配置的时候就搞混了,在这里给大家分享一下。
grub的配置就是修改linux内核的启动参数,和grub相关的路径有3个:
-
/boot/grub
这里有个重要文件,grub.cfg
,linux内核启动的时候就会加载这个文件里面的参数,可以直接修改grub.cfg
,但不建议
-
/etc/default/grub.d
,这个文件夹是自定义的grub配置参数,例如上面的添加GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
,就可以建个后缀名为cfg
,然后写上这个自定义的配置参数就可以了。
-
/etc/grub.d/
,这个文件夹是执行脚本,就是把/etc/default/grub.d
的自定义配置参数写到/boot/grub/grub.cfg
,大概是这么个关系,真正运行逻辑也许更复杂,
以上就是grub配置参数的运行逻辑,所以解除docker限制内存警告,在
/etc/default/grub.d
建个xx.cfg的文件,添加GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
内容,然后执行sudo update-grub
,最后重启系统sudo reboot
, 重启之后验证一下内核是否有新修改的配置参数cat /proc/cmdline
, 看内容里是否有cgroup_enable=memory swapaccount=1