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

docker run --memory 内存硬限制

限制容器可用的物理内存:达到硬限触发 OOM 终止;配合 --memory-reservation 设置软限,是资源限制里应优先设置的项。

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

--memory 解决什么问题

docker run --memory 为容器设置 cgroup 内存硬上限:用量触到上限时由内核 OOM killer 直接杀掉容器内进程,退出码 137,应用自身往往来不及留日志。它通常和软限 --memory-reservation 一起用,两者语义不同。

基本信息

用途内存硬上限(cgroup v2 对应 memory.max)
语法--memory=512m 或 -m 1g
配套--memory-reservation 软限,内存紧张时优先回收超出部分
相关--memory-swap 限制内存加 swap 的总量
查看docker stats 看用量,docker inspect -f '{{.HostConfig.Memory}}' 看设置值

典型使用场景

  • 多个服务共用一台宿主:逐个设上限,防止一个服务把内存吃光拖垮邻居
  • 复现线上 OOM:本地按线上限额运行,提前暴露内存增长问题
  • 给 JVM、Node 等服务定上限后同步调整堆参数,避免语言运行时按宿主内存估算
  • 压测与单测中限定被测服务资源,保证每次跑出来的结果可比
  • 在两核两 G 的小 VPS 上跑多个容器时做基本的资源隔离
  • 排查内存泄漏:设一个偏高的上限后持续观察 MEM USAGE 曲线,比在宿主看总内存更容易定位是谁在涨

示例

示例
docker run -d --name api \
  --memory=512m --memory-reservation=384m --memory-swap=1g \
  app/api:1.4.2
docker stats --no-stream api                    # MEM USAGE / LIMIT 两列对照
docker inspect -f '{{.HostConfig.Memory}} {{.HostConfig.MemoryReservation}}' api
docker inspect -f '{{.State.OOMKilled}}' api     # 被杀过就是 true

几个内存参数的差别

参数含义使用建议
--memory硬上限,超过即被杀长期运行的服务都该设置
--memory-reservation软限,内存紧张时优先回收超出的部分按常态占用设,可低于硬限
--memory-swap内存加 swap 的总配额,等于 --memory 时禁用 swap延迟敏感的服务禁用 swap
--oom-kill-disable禁止 OOM 杀容器内进程仅特殊场景,误用会让宿主机整体失去响应
限额按 cgroup 计量,含应用堆、运行时缓存与 tmpfs 占用,不是只看进程 RSS;Java 容器要配 -XX:MaxRAMPercentage 之类参数让堆跟随限额,否则运行时会算错可用内存。
判断是否被内存限制杀掉,看 docker inspect 的 OOMKilled 标记或 docker events 里的 oom 事件,比翻应用日志更快定位。
docker stats 的 MEM USAGE / LIMIT 是限额使用率;用量长期贴住上限说明余量已不足,加限之前先看趋势是平稳抬升(泄漏)还是随请求波动(正常峰值)。

易错点

  • 上限设得低于应用启动峰值,容器会陷入起来就被杀的死循环,先观测真实峰值再定值
  • 只看 --memory 不看 --memory-swap:swap 配额默认是内存上限的两倍,不禁用 swap 时容器可能大量换页,响应时间明显变差
  • 超限被杀时应用日志常无堆栈,误判成代码崩溃会白查很久,先确认 OOMKilled 标记
  • 在容器里跑压测或编译这类瞬时高占用任务时按常驻内存设限,会频繁触发 OOM,需要为突发留余量或单独放行
  • cgroup v1 与 v2 宿主机上读取用量上限的文件路径不同,写采集脚本时两种都要兼容,否则新系统上取不到值

数据来源与参考

  • Docker 官方 CLI 参考:docker run --memory(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌