如何解决对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以内。

总结

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

相关文章

  • 详解SpringBoot项目docker环境运行时无限重启问题

    详解SpringBoot项目docker环境运行时无限重启问题

    这篇文章主要介绍了详解SpringBoot项目docker环境运行时无限重启问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Docker 容器生命周期 架构 以及和VM之间的差异详解

    Docker 容器生命周期 架构 以及和VM之间的差异详解

    这篇文章主要介绍了Docker 容器生命周期 架构 以及和VM之间的差异详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker容器日志时间不一致问题

    docker容器日志时间不一致问题

    这篇文章主要介绍了docker容器日志时间不一致问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Docker 简单部署 ElasticSearch的实现方法

    Docker 简单部署 ElasticSearch的实现方法

    这篇文章主要介绍了Docker 简单部署 ElasticSearch的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • docker容器的几种存储详解

    docker容器的几种存储详解

    本文主要介绍了docker容器的几种存储方式,主要介绍了3种,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Docker容器中数据卷volumes的使用

    Docker容器中数据卷volumes的使用

    volume(卷)用来存储docker持久化的数据,其实就是一个主机上的一个目录,由docker统一管理,下面这篇文章主要给大家介绍了关于Docker容器中数据卷volumes使用的相关资料,需要的朋友可以参考下
    2022-04-04
  • Docker容器网络配置全攻略之桥接、Host、container详解

    Docker容器网络配置全攻略之桥接、Host、container详解

    这篇文章主要介绍了Docker容器网络配置全攻略之桥接、Host、container的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Docker部署web项目的实现

    Docker部署web项目的实现

    这篇文章主要介绍了Docker部署web项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 详解docker-compose.yml文件常用模版命令

    详解docker-compose.yml文件常用模版命令

    这篇文章主要介绍了docker-compose.yml文件常用模版命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • Docker 修改docker存储位置 修改容器镜像大小限制操作

    Docker 修改docker存储位置 修改容器镜像大小限制操作

    这篇文章主要介绍了Docker 修改docker存储位置 修改容器镜像大小限制操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11

最新评论