如何解决对Docker容器内存限制警告或未实际限制的问题

 更新时间:2025年04月25日 10:00:45   作者:organwalk  
这篇文章主要介绍了如何解决对Docker容器内存限制警告或未实际限制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

解决对Docker容器内存限制警告或未实际限制的问题

WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
a229353897850843206a76458307a37eaeb3c8e1adf0e58e458b9ed10790cfa8

当试图在启动docker容器时使用–memory指令时可能会出现此类警告。

场景

笔者的场景是试图在一个2G内存服务器上加入RabbitMQ,但是内存已所剩无几。为了防止种种问题,需要进行限制。

一个想法是在启动容器时使用–memory指令限制其内存大小。但启动成功后笔者收到文章上述警告。

含义

这意味着笔者服务器的Linux 内核当前没有启用对 swap 限制的支持,或者 cgroup 没有正确挂载。而cgroup(Control Group)是 Linux 内核中的一个功能,用于限制、控制和监视进程组的资源使用,如 CPU、内存、磁盘 I/O 等。

cgroup 允许系统管理员将一组进程组织在一起,并为它们分配资源。

如果你没有正确挂载cgorup,在这种情况下,虽然你指定了 --memory 限制,但无法限制容器的 swap 内存使用。

解决方案

步骤 1:更新 GRUB 配置

  1. 编辑 GRUB 配置文件
sudo nano /etc/default/grub
  1. GRUB_CMDLINE_LINUX_DEFAULT 行中添加 cgroup_enable=memory swapaccount=1
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cgroup_enable=memory swapaccount=1"

这行将引导加载程序的默认内核命令行参数,以下是具体参数释义:

  • quiet: 启动时禁用大多数内核启动信息的显示,使启动过程更加简洁。
  • splash: 启用启动时显示图形启动画面(Splash Screen),通常用于显示启动时的厂商标志或进度条。
  • cgroup_enable=memory: 启用内核的 cgroup 内存子系统,允许使用 cgroup 来管理和限制内存资源。
  • swapaccount=1: 启用 swap 账户统计。这个参数使 cgroup 能够跟踪和管理交换空间(swap)的使用情况。
  1. 保存并退出编辑器

步骤 2:更新 GRUB 并重启

  • 更新 GRUB 配置
sudo update-grub
  • 重启系统
sudo reboot

验证

通过以下命令检验容器是否真的将memory进行了限制。

比如,验证RabbitMQ的内存是否被限制在350mb以内:

sudo docker stats rabbitmq

得到如下输出结果:

CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT   MEM %     NET I/O      BLOCK I/O        PIDS
7e38b33cd7f7   rabbitmq   0.16%     135.3MiB / 350MiB   67.65%    1.2kB / 0B   56.9MB / 598kB   29

可以发现在limit一列中,的确将RabbitMQ的内存限制在350mb以内。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker核心知识点和常用指令(命令)速通

    Docker核心知识点和常用指令(命令)速通

    Docker是一种容器化平台,它通过容器技术将所有依赖项打包到一个镜像中,再通过镜像运行一个独立并且可移植的容器,这篇文章主要介绍了Docker核心知识点和常用指令(命令)的相关资料,需要的朋友可以参考下
    2026-04-04
  • docker已启动容器修改添加端口映射的两种方法

    docker已启动容器修改添加端口映射的两种方法

    最近工作中遇到一个问题,docker容器启动后怎么修改端口映射?通过查找相关资料解决了,这篇文章主要给大家介绍了关于docker已启动容器修改添加端口映射的两种方法,需要的朋友可以参考下
    2022-08-08
  • docker找不到镜像无法成功下载ragflow-main的问题解决办法

    docker找不到镜像无法成功下载ragflow-main的问题解决办法

    这篇文章主要介绍了docker找不到镜像无法成功下载ragflow-main的问题解决办法,文中通过代码及图文将解决的办法介绍的非常详细,对大家学习或者使用docker具有一定的参考借鉴价值,需要的朋友可以参考下
    2025-04-04
  • 已有docker镜像构建过程分析(使用示例)

    已有docker镜像构建过程分析(使用示例)

    docker history命令用于查看指定镜像的历史层信息,它显示了镜像创建过程中的每一层,包括创建时间、创建者、大小和注释等信息,本文介绍已有docker镜像构建过程分析,感兴趣的朋友一起看看吧
    2024-12-12
  • Docker部署前后端分离项目的三种方式小结

    Docker部署前后端分离项目的三种方式小结

    本文主要介绍了Docker部署前后端分离项目的三种方式小结,包含通过两个容器部署,通过compose编排容器自动部署和将前后端项目打成一个镜像部署的三种方式,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Docker Compose 常用命令详解(最新推荐)

    Docker Compose 常用命令详解(最新推荐)

    Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具,本文将详细介绍 Docker Compose 的常用命令,帮助你高效地管理容器应用,感兴趣的朋友一起看看吧
    2025-04-04
  • 解决docker安装完成报:bridge-nf-call-iptables is disabled问题

    解决docker安装完成报:bridge-nf-call-iptables is disabled问题

    这篇文章主要介绍了解决docker安装完成报:bridge-nf-call-iptables is disabled问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker Buildx 多平台镜像构建的项目实践

    Docker Buildx 多平台镜像构建的项目实践

    本文全面介绍了Docker Buildx多平台镜像构建技术,从原理到生产实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • Docker如何实现搭建本地私有仓库

    Docker如何实现搭建本地私有仓库

    这篇文章主要介绍了Docker搭建本地私有仓库的实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • 配置docker阿里云镜像地址的详细步骤记录

    配置docker阿里云镜像地址的详细步骤记录

    docker本身的仓库非常慢,但是国内有阿里云的镜像仓库非常快,下面这篇文章主要给大家介绍了关于配置docker阿里云镜像地址的详细步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07

最新评论