Docker限制容器的内存使用大小的实战指南

 更新时间:2026年02月07日 08:46:34   作者:sg_knight  
在使用 Docker 部署服务时,如果不加限制,某个容器可能因为内存泄漏或负载过高,导致主机内存被耗尽,拖垮其他容器甚至整个系统,所以本文给大家介绍了Docker如何限制容器的内存使用大小,需要的朋友可以参考下

一、为什么要限制容器内存?

在使用 Docker 部署服务时,如果不加限制,某个容器可能因为内存泄漏或负载过高,导致主机内存被耗尽,拖垮其他容器甚至整个系统。

因此,在生产环境中,限制容器内存使用量(Memory Limit) 是一项关键的资源控制措施。

二、Docker 中的内存限制参数

Docker 基于 Linux 的 cgroups(控制组) 机制实现资源隔离。
和内存相关的主要参数如下:

参数说明
--memory-m限制容器最大可使用的物理内存
--memory-swap限制容器可使用的总内存(物理内存 + swap)
--oom-kill-disable是否禁用 OOM Killer(不建议在生产中关闭)

三、基础用法示例

1. 限制容器最大内存为 512MB

docker run -d --name myapp -m 512m nginx

此命令表示容器最多使用 512MB 内存。超过限制时,系统会触发 OOM 机制终止容器。

2. 同时限制内存与 swap

docker run -d --name myapp -m 512m --memory-swap 1g nginx

说明:

  • 物理内存上限:512MB
  • 总内存(含 swap)上限:1GB
  • 超出时系统自动使用 swap 空间

若 --memory-swap 与 --memory 值相同,表示禁止使用 swap

四、查看容器的内存使用情况

使用以下命令可实时查看容器的资源使用:

docker stats

输出示例:

CONTAINER ID   NAME     MEM USAGE / LIMIT
a1b2c3d4e5f6   myapp    120.5MiB / 512MiB

也可通过以下命令查看详细配置:

docker inspect myapp | grep Memory

五、容器 OOM(内存不足)行为

当容器内存达到限制时,Docker 会触发 OOM Killer(Out Of Memory Killer),强制终止进程。

此时容器的退出码为 137

docker ps -a

输出示例:

Exited (137) 10 seconds ago

表示该容器因内存超限被系统杀死。

六、在 Docker Compose 中限制内存

如果使用 docker-compose.yml 启动容器,可以这样定义:

version: '3.8'
services:
  web:
    image: nginx
    deploy:
      resources:
        limits:
          memory: 512M

注意:deploy.resources.limits 仅在 Docker Swarm 模式 下生效。
普通 Compose 可使用旧语法:

services:
  web:
    image: nginx
    mem_limit: 512m

七、最佳实践建议

  1. 所有生产容器都应设置内存限制,防止资源耗尽。
  2. 根据服务特性预留一定内存冗余,避免频繁触发 OOM。
  3. 内存敏感型服务(如 Redis、Java)应重点监控。
  4. 配合 docker stats 做长期资源趋势分析。
  5. 结合 --cpus 参数同时控制 CPU 资源,更均衡。

八、总结对照表

目标命令或配置示例
限制最大内存-m 512m
限制总内存(含 swap)--memory-swap 1g
禁止使用 swap--memory-swap=512m
查看运行状态docker stats
Compose 配置mem_limit: 512m

合理配置容器内存限制,是 Docker 运维中保障稳定性与资源隔离性的关键。
建议在上线前就设置好各服务的资源边界,让系统运行更安全、更高效。

以上就是Docker限制容器的内存使用大小的实战指南的详细内容,更多关于Docker限制容器内存使用大小的资料请关注脚本之家其它相关文章!

相关文章

  • dockerfile-maven-plugin使用指南小结

    dockerfile-maven-plugin使用指南小结

    最近在将应用部署到容器平台,需要在打包时生成docker镜像,在网上首先搜到了docker-maven-plugin这个插件,本文就来介绍了dockerfile-maven-plugin使用小结,感兴趣的可以了解一下
    2021-09-09
  • docker数据管理使用及说明

    docker数据管理使用及说明

    本文介绍了Docker数据卷的基本概念、创建和管理方法,强调数据卷用于持久化和共享数据,生命周期独立于容器,并说明了如何挂载主机目录及清理无主数据卷的方法
    2025-10-10
  • docker容器时区错误问题

    docker容器时区错误问题

    常出现docker中运行的容器获取到的时间与北京时间相差8小时的问题,其实是因为容器运行的时区不正确。本文主要介绍了docker容器时区错误问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • yum下载rpm以及相关依赖的方式离线安装docker

    yum下载rpm以及相关依赖的方式离线安装docker

    今天小编就为大家分享一篇关于yum下载rpm以及相关依赖的方式离线安装docker,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 使用Docker部署前后端分离项目的完整步骤

    使用Docker部署前后端分离项目的完整步骤

    刚刚接触基础的运维工作,采用的是docker部署的方式,下面这篇文章主要给大家介绍了关于使用Docker部署前后端分离项目的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 在IntelliJ IDEA中使用Docker的开发指南

    在IntelliJ IDEA中使用Docker的开发指南

    这篇文章主要给大家介绍了在IntelliJ IDEA中使用Docker开发指南,文中通过图文介绍的非常详细,对我们的使用Docker有一定的帮助,需要的朋友可以参考下
    2023-09-09
  • Docker中使用gosu的方法详解

    Docker中使用gosu的方法详解

    在Docker镜像中启动服务时,我们通常不希望以root身份运行主进程,sudogosu是一个非常轻量的工具,功能类似sudo,但不会产生额外进程,非常适合在Docker容器中用来切换用户,本文给大家介绍Docker中使用gosu的方法,感兴趣的朋友一起看看吧
    2025-10-10
  • Docker容器数据卷介绍及操作示例

    Docker容器数据卷介绍及操作示例

    这篇文章主要为大家介绍了Docker容器数据卷介绍及操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 对已有的docker容器增加新的端口映射问题(两种方式)

    对已有的docker容器增加新的端口映射问题(两种方式)

    这篇文章主要介绍了对已有的docker容器增加新的端口映射,在运行容器时指定映射端口运行后,如果想要添加新的端口映射,使用两种方式都可以,需要的朋友可以参考下
    2022-01-01
  • 如何在mac上用docker对Oracle进行部署使用

    如何在mac上用docker对Oracle进行部署使用

    这篇文章主要介绍了如何在mac上用docker对Oracle进行部署使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03

最新评论