--cpus设硬上限,--cpu-shares设软比例;前者限制最大cpu使用量(如--cpus 1.5等效每100ms最多运行150ms),后者仅在资源争用时按权重分配时间片(如2048:1024≈2:1),空闲时不受限。
用 --cpus 和 --cpu-shares 控制 cpu 分配,本质是两种不同逻辑:一个是硬上限,一个是软比例。选哪个取决于你想要“保底不超”还是“争资源时有优先级”。
—cpus:设绝对使用上限
这个参数直接限制容器最多能用多少个 CPU 核心(支持小数),属于硬性限制。无论主机有多少空闲 CPU,容器都不能突破这个值。
- 例如
docker run --cpus 1.5 nginx,表示该容器最多占用 1.5 个逻辑 CPU 核心的计算能力 - 底层等效于设置 cgroup 的
cpu.cfs_quota_us=150000和cpu.cfs_period_us=100000(即每 100ms 最多运行 150ms) - 适合对响应延迟敏感、或需防止突发计算拖垮整机的服务,比如 API 网关、实时数据处理任务
—cpu-shares:设相对调度权重
这个参数不设上限,只在多个容器同时抢 CPU 时起作用。它决定“分蛋糕时你拿多大块”,但前提是蛋糕不够分。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 默认值是 1024;若 A 设为 2048、B 设为 1024,则 CPU 紧张时 A 大致获得 B 两倍的执行时间
- 注意:如果主机 CPU 很空闲,哪怕 shares 很低,容器也能跑满全部可用核
- 实际比例只看各容器 当前活跃的 shares 总和,不是和默认值比。比如三个容器分别设 512、1024、1536,那它们的分配比就是 1:2:3
两者可以一起用,而且推荐
单独用 --cpu-shares 容易被单个容器吃光所有 CPU;只用 --cpus 又可能在低负载时浪费资源。生产环境常见组合:
-
docker run --cpus 2 --cpu-shares 2048 nginx:最多用 2 核,但和其他容器争资源时优先级更高 -
docker run --cpus 0.5 --cpu-shares 512 redis:严控资源,同时降低其在竞争中的权重 - 在 docker-compose.yml 中对应写法:cpus: '2' 和 cpu_shares: 2048










