首页/云/Docker 容器速查/docker run --cpuset-cpus 绑定 CPU 核
资源与安全50 条

docker run --cpuset-cpus 绑定 CPU 核

把容器固定到指定 CPU 核上运行:用于隔离敏感服务的调度抖动,或把实时性要求高的负载与噪声邻居错开。

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

把容器锁在指定核上

--cpuset-cpus 把容器可用的 CPU 核限定在给定的集合上,取值形式是逗号分隔的核号或连字符范围,例如 0,1 或 0-2。用途是隔离调度抖动:让实时性要求高的服务独占几核,或者让噪声邻居与关键服务错开到不同的核上。它解决的是 CPU 层面的竞争,内存带宽与磁盘 IO 的互相影响不在它的作用范围里。

基本信息

语法--cpuset-cpus="0,1" 或 "0-2"
取值依据宿主 nproc 与 /proc/cpuinfo 的核编号
核对方式docker inspect 的 HostConfig.CpusetCpus 字段
作用范围仅 CPU 调度,不含内存与 IO 争抢

典型使用场景

  • 关键服务独占:把实时性要求高的进程固定在少数核上,减少调度抖动
  • 多实例隔离:一台机器跑多个同类实例时,每个实例绑定不同的核
  • NUMA 机器优化:把容器绑在同一 NUMA 节点内的核上,减少跨节点内存访问
  • 性能对比:绑核后测吞吐,减少核间迁移带来的测量偏差
  • 故障隔离:噪声邻居出问题时,先确认两者是否共用同一批核

绑核与核对

绑核与核对
# 先看宿主有多少核	nproc
cat /proc/cpuinfo | grep -c processor

# 启动时绑定 0、1 两核
docker run -d --name rt --cpuset-cpus="0,1" worker/rt:1.2.0

# 核对配置
docker inspect -f '{{.HostConfig.CpusetCpus}}' rt

# 容器内确认可用的核集合
docker exec rt sh -c 'grep Cpus_allowed_list /proc/self/status'

取值与场景

场景取值思路说明
实时敏感服务独占固定的少数核与噪声邻居错开,减少抢占
多实例同机部署每个实例绑定不同核号避免实例之间互相抢占
NUMA 机器绑定同一节点内的核降低跨节点内存访问延迟
压测与调优固定绑核后逐项测吞吐排除调度波动带来的偏差
绑核会限制容器的可用算力上限:绑的核越少,吞吐上限越低,容量规划时要把这个上限算进去。
核编号在容器内看到的是宿主的编号,跨宿主的部署脚本不要写死核号,按环境变量注入更灵活。

易错点

  • 多个高负载容器绑到同一批核:彼此拖慢,绑定前先看清宿主核数与现有分配
  • 以为绑核能解决所有抖动:内存带宽、缓存与 IO 的争抢不受它影响,需要配合其他手段
  • 写死核号后换机器:核数不同的宿主上直接启动失败或绑定到不存在的核
  • 把绑核当性能优化万能解:它更多是隔离手段,单容器性能提升要靠代码与配置本身

数据来源与参考

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