首页/云/Docker 容器速查/docker run --cpus 限制 CPU
资源与安全50 条

docker run --cpus 限制 CPU

限制容器可使用的 CPU 时间上限:--cpus=1.5 表示可用一个半核的时间片,多核机器上按秒分配,适合防单容器吃满整机。

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

--cpus 是什么

--cpus 限制容器可以使用的 CPU 时间总量:--cpus=1.5 表示一秒内最多消耗 1.5 个 CPU 秒,多核机器上按配额分配。它的用途是防止单个容器把整机 CPU 吃满,影响同宿主上的其他服务。

基本信息

用途CPU 时间上限(基于 CFS 配额)
语法--cpus=1.5 或 --cpus=2
相关参数--cpu-shares 只是争抢时的相对权重,不是上限
查看docker stats 看占用与限额的对照
编排对应compose 的 cpus 字段、编排平台的 CPU 限额

典型使用场景

  • 多服务共用一个宿主:逐个设上限,防止一个服务抢占整机 CPU
  • 复现线上性能问题:本地按线上配额运行,观察排队与延迟表现
  • 批处理任务限速:限制后台任务的 CPU 占用,保护在线服务
  • 排查响应变慢:确认服务是不是撞到了 CPU 限额
  • 测试环境做资源隔离,避免压测把邻居的服务一起拖慢
  • 为容量规划提供依据:观察长期占用率决定是否扩容

示例

示例
docker run -d --cpus=1.5 --name api app/api:1.4.2
docker stats --no-stream api                       # 看 CPU% 与限额的对照
docker inspect -f '{{.HostConfig.NanoCpus}}' api   # 以纳秒表示的配额值
docker run -d --cpus=2 --name batch app/batch:1.4.2

CPU 相关参数的区别

参数语义使用建议
--cpusCPU 时间总量的硬上限防止单容器吃满整机的首选
--cpu-shares相对权重,仅在争抢时生效按服务重要性分配权重
--cpuset-cpus绑定到指定核心对缓存敏感或需要核隔离的场景
--cpu-quota 与 --cpu-period底层配额与周期一般用 --cpus 表达更直观
--cpus 是配额不是核数:容器里显示的核心数不一定随之变化,实际吞吐要以统计与压测结果为准。
撞到 CPU 限额时表现为请求排队、延迟上升,而不是直接报错;docker stats 里的 CPU% 顶在配额附近就是明显信号。
CPU 密集型服务要留突发余量,长期贴着上限运行意味着该优化或扩容了。
限额只对容器内进程生效,容器外的排查工具、日志采集代理占用的 CPU 不受它约束,容量评估时要把这部分算进去。

易错点

  • 把 --cpus 与 --cpu-shares 混为一谈:后者只在争抢时生效,单独设置无法限制空闲时的占用
  • 限额设得过低导致大量排队,表现为服务无故变慢,压测时容易被误判成代码问题
  • 压测时宿主上还跑着其他容器,测得的数据互相干扰,结论不可信
  • 只限制 CPU 而不管内存与并发,瓶颈转移到别的维度,整体表现依旧不稳定
  • 在容器内用 nproc 判断可用算力:它显示的是宿主核数或调度设置,不代表配额,据此估算吞吐会明显偏差

数据来源与参考

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