在Docker中混合cpu-shares和cpuset-cpus

我想运行两个容器与以下资源分配:

  • 容器“C1”:保留cpu1,共享cpu2和20个cpu-shares
  • 容器“C2”:保留cpu3,共享cpu2,共80个cpu-shares

如果我以这种方式运行这两个容器:

docker run -d --name='C1' --cpu-shares=20 --cpuset-cpus="1,2" progrium/stress --cpu 2 docker run -d --name='C2' --cpu-shares=80 --cpuset-cpus="2,3" progrium/stress --cpu 2 

我得到的C1如预期的那样占用了cpu1的100%,但cpu2占50%(而不是20%),C2占据了cpu3的100%,cpu2占了50%(而不是80%)。

它看起来像–cpu-shares选项被忽略。 有没有办法获得我正在寻找的行为?

docker运行提到该参数为:

 --cpu-shares=0 CPU shares (relative weight) 

contrib/completion/zsh/_docker#L452包含:

 "($help)--cpu-shares=[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)" 

所以这些值不是基于%的。

OP提到--cpu-shares=20/80 20/80与以下Cpuset约束一起工作 :

  docker run -ti --cpuset-cpus="0,1" C1 # instead of 1,2 docker run -ti --cpuset-cpus="3,4" C2 # instead of 2,3 

(这些值仅在docker 1.9.1和PR 16159之后才被validation/检查 )

注意:也有CPU配额限制 :

--cpu-quota标志限制了容器的CPU使用率。 默认的0值允许容器占用100%的CPU资源(1个CPU)。