解决 Docker 启动容器时内存限制失效警告问题

分类:Linux 评论: 0

使用 Debian 10 Buster 部署 Docker 容器环境时,启动限制内存使用的容器时会出现警告。

缘起

报错如下

root@debian:~# docker run --name myweb --memory=512m --restart=always --network=backend \
> -p 80:80 -p 443:443 \
> -v /usr/mystack/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
> -v /usr/mystack/nginx/conf.d:/etc/nginx/conf.d \
> -v /usr/mystack/nginx/logs.d:/etc/nginx/logs.d \
> -v /usr/mystack/nginx/cert.d:/etc/nginx/cert.d \
> -v /usr/mystack/www:/var/www -d nginx:stable-alpine-perl
WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
c5cf19d3598f6affcb1adeb5bd28b9c21c1b715127a50a9a0510d07e9041431e

处理

查询资料后发现官方有解决办法,此问题只会出现在非 RPM 系列的系统上,如 Debian / Ubuntu 等,RadHat CentOS Fedora 等系统默认启用此功能,此功能基于内核实现,因此需要修改内核启动参数。

小贴士:如果容器不需要限制内存,则可以忽略此问题,即使不启动 Docker ,Swap 也会默认占用 1% 左右的空间,并且系统的总体性能会降低约 10% 。

内核参数

修改系统启动参数

# vim /etc/default/grub

GRUB_CMDLINE_LINUX 行后添加以下参数

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

更新启动参数

# update-grub

重启系统即可

# reboot

附录

参考链接

回复