docker compose v3+ 通过 deploy.resources 下的 limits(硬性上限)和 reservations(调度预留)实现资源声明式限制;cpu 以小数表示核心数(如 '0.5'),内存支持 b/k/m/g/t 单位(如 512m),并可选配置 memswap_limit 禁用 swap。
直接在 deploy.resources 下配置 limits 和 reservations 即可实现 cpu、内存等资源的声明式限制,这是 docker compose v3+ 推荐的标准方式,尤其适配 swarm 部署场景。
核心配置结构
必须嵌套在服务的 deploy 字段内,使用 resources → limits/reservations 两级结构:
-
limits:硬性上限,超限会被系统强制干预(如 OOM Kill 内存超限进程、CPU 时间被内核截断) -
reservations:调度预留量,用于 Swarm 调度器判断节点是否满足启动条件,不具运行时强制力
CPU 限制写法与含义
CPU 以小数表示逻辑核心占比,单位是“核心数”,不是百分比:
-
cpus: '0.5'→ 最多使用 0.5 个完整 CPU 核心(即每 100ms 周期最多运行 50ms) -
cpus: '2.0'→ 最多使用 2 个完整核心 - 值支持最多三位小数(如
'1.25'),底层对应 cgroups 的cpu.cfs_quota_us / cpu.cfs_period_us
内存限制写法与注意事项
内存单位支持大小写不敏感的后缀:B、K、M、G、T(如 512M、1G、2048m):
-
memory: 512M→ 容器内存使用硬上限为 512MB;超限时内核触发 OOM Killer 终止进程 - 不配置
memswap_limit时,容器默认允许使用等量 swap(即memory + swap = 2 × memory) - 若需禁用 swap,显式设
memswap_limit: 512M(等于 memory 值)
完整配置示例
以下 docker-compose.yml 片段为一个 Web 服务设置生产级资源约束:
version: '3.8'
services:
web:
image: nginx:alpine
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
# 可选:限制 swap 总量(含物理内存)
# memswap_limit: 512M
reservations:
cpus: '0.25'
memory: 128M
该配置表示:容器最多用满 1 个 CPU 核、512MB 物理内存;调度时确保节点至少空闲 0.25 核与 128MB 内存才允许部署。











