Docker内存预留核心是--memory-reservation参数,它提供软性保障:系统空闲时容器可超用,内存紧张时优先保留该额度;建议设为硬限制的50%–70%,并须配合--memory硬限和--memory-swap禁用swap。

在 Docker 中配置内存预留量,核心是使用 --memory-reservation 参数。它不是硬性上限,而是向容器运行时“承诺”的最低可用内存保障——当系统资源紧张时,Docker 会优先保障这部分内存不被其他容器抢占,从而避免基础服务(如数据库、API 网关、配置中心)因内存抖动而响应变慢或异常退出。
理解内存预留的实际作用
内存预留是软限制,只在内存压力下生效:
- 系统空闲时,容器可自由使用超过预留值的内存(只要不超过 --memory 硬限制)
- 系统内存吃紧时,内核会优先回收未预留的内存页,保留 --memory-reservation 指定的部分
- 它不占用物理内存,也不阻止其他容器分配内存,只影响 cgroup 的 reclaim 行为
设置合理的预留值
预留值不能凭空设定,需结合应用实际驻留内存(RSS)和启动峰值估算:
- 先用
docker stats <container></container>观察稳定运行时的 RSS 值,取其 1.2–1.5 倍作为起点 - 例如:Nginx 容器常态 RSS 为 80MB,建议设
--memory-reservation=128m - 预留值通常设为硬限制(
--memory)的 50%–70%,比如硬限 1G,则预留 512M–768M - 切忌设得过高(如预留 90%),否则会人为加剧内存争抢,降低整体资源利用率
命令行与 Compose 中的写法
直接运行时指定:
docker run -d --name=redis-core --memory=1g --memory-reservation=640m redis:7-alpine
Docker Compose v3.8+(非 Swarm 模式也支持):
services:<br> redis-core:<br> image: redis:7-alpine<br> deploy:<br> resources:<br> reservations:<br> memory: 640M<br> limits:<br> memory: 1G
搭配硬限制与禁用 swap 提升稳定性
仅设预留不够,必须配合以下两项才能真正稳住基础服务:
- 始终设置 --memory(硬限制),防止突发内存泄漏拖垮整机
- 显式设置 --memory-swap 与 --memory 相同(如都为
1g),彻底禁用 swap —— 避免 I/O 延迟导致服务卡顿或超时 - 对关键服务(如 etcd、consul),可额外加 --kernel-memory=64m,防止内核缓存失控


















