首页/云/Docker 容器速查/docker run --memory-reservation 内存软限制
资源与安全50 条

docker run --memory-reservation 内存软限制

内存软限制:设置 --memory-reservation 后容器日常可弹性使用内存,只有在宿主内存紧张时才被压回该水位,适合给带缓存的服务留缓冲。

Docker 容器速查云更新于 2026-10-13

内存软限制是什么

--memory-reservation 设置内存软限制:容器日常可弹性使用内存,只有在宿主整体内存紧张时才被压回这个水位。它适合给带缓存的服务留缓冲,既能利用空闲内存,又不会在压力下无限膨胀。

基本信息

语法--memory-reservation=512m,通常与 --memory 搭配
性质软限制(弹性水位)
生效条件宿主出现内存压力时
映射cgroup v2 → memory.low;v1 → memory.soft_limit_in_bytes
核对docker inspect 的 HostConfig.MemoryReservation

典型使用场景

  • 带本地缓存的服务:空闲时用满内存,压力下让出给关键业务
  • 同一宿主混跑在线与离线任务,用软限界定离线任务可让出的量
  • 容量规划:给每个容器划一条弹性线,降低宿主整体 OOM 概率
  • 压测阶段验证内存回收行为是否符合预期
  • 多租户环境里约束单个租户的内存膨胀幅度

设置与核对

设置与核对
docker run -d --memory=1g --memory-reservation=512m --name api app/api:1.4.2
docker inspect -f '{{.Name}} hard={{.HostConfig.Memory}} soft={{.HostConfig.MemoryReservation}}' api
docker info -f 'CgroupVersion={{.CgroupVersion}}'   # 先确认 cgroup 版本,字段映射不同
# 压测时制造内存竞争,才能观察到软限的回收行为

三个内存参数对照

参数语义超限后果
--memory硬限,不可超过超过后触发 OOM 或被终止
--memory-reservation软限,压力时回压压力下被回收,平时可超出
--memory-swap内存加交换的总量总量约束
只设硬限没有弹性水位空闲内存无法被其他容器借用
软限制只在宿主出现内存压力时生效;压测时要主动制造内存竞争,否则观察不到回收行为。
把软限制当硬上限会误判容量:容器超过软限后仍可继续分配内存,直到撞上硬限。
cgroup v1 与 v2 的实现字段不同,跨代环境排查前先用 docker info 确认版本,再对照相应字段。
软限制要小于或等于硬限制才有意义,配置时两个值一起给出,避免只写一个造成理解偏差。
运行中可以用 docker update 调整软限应急,但硬限相关变更受内核与 cgroup 版本限制,正式改动仍以重建容器为准,并回写到编排文件。

易错点

  • 把软限制当硬上限会误判容量:容器超过软限后仍可继续分配,直到撞上硬限
  • 压测时不制造内存竞争就看不到软限生效,容易误判配置无效
  • cgroup v1 与 v2 的字段映射不同,排查前先确认版本,否则容易查错地方
  • 只写软限而不写硬限,容器仍可能膨胀到把宿主拖垮,两个值要成对设置

数据来源与参考

  • Docker 官方文档:Runtime options with Memory, CPUs, and GPUs(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌