You need to enable JavaScript to run this app. 如何为整个docker-compose栈设置内存限制?
优惠活动
大模型
产品
解决方案
定价
更多

如何为整个docker-compose栈设置内存限制?

Docker Compose 栈总内存限制方案

目前有两种成熟的方案可以直接限制整个docker compose栈的总内存占用,不需要单独为每个服务设置内存限额:

方案1:基于cgroup的通用限制(适用于所有非Swarm模式部署场景)

这个方案对所有版本的docker-compose都生效,原理是把整个docker-compose启动进程纳入自定义内存限制的cgroup,所有该进程派生的容器子进程都会继承父cgroup的内存上限,实现总内存管控:

  • 首先安装cgroup工具包:
    Debian/Ubuntu系执行:apt install -y cgroup-tools
    RHEL/CentOS/Fedora系执行:yum install -y libcgroup-tools
  • 创建自定义内存限制cgroup,示例中将总内存上限设为4G:
    mkdir -p /sys/fs/cgroup/memory/compose_total_limit
    echo 4G > /sys/fs/cgroup/memory/compose_total_limit/memory.limit_in_bytes
    
  • 启动docker-compose时指定加入该cgroup即可:
    cgexec -g memory:compose_total_limit docker-compose up -d

方案2:Swarm模式下的原生配置限制

如果你使用docker stack deploy命令部署compose栈(Swarm模式),可以直接通过compose配置或者Swarm资源配额功能实现总栈内存限制,compose 3.8及以上版本支持顶层资源约束配置,示例如下:

version: "3.8"
services:
  web:
    image: nginx:alpine
  db:
    image: mysql:8.0
# 顶层全局资源限制,作用于整个stack所有服务总和
x-stack-resources:
  limits:
    memory: 4G

替代方案

如果不想额外配置cgroup或使用Swarm,也可以手动计算所有服务的内存限额总和,为每个service单独设置mem_limit参数,累加值等于你需要的总内存上限,实际管控效果和直接限制总栈一致。

内容的提问来源于stack exchange,提问作者Christian G. Faraone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 16:24:01