限制Docker容器中的cpu内核

我试图限制使用docker –cpuset-cpus选项的容器的CPU。 但由于某种原因,我没有得到理想的结果。 例如,下面的命令应该只打印1:

docker run -it --cpuset-cpus=0 ubuntu:latest grep processor /proc/cpuinfo | wc -l 

但是我得到的结果是4(4是我的主机中显示的cpus的数量)。 这对任何操作系统都是如此。

 docker run -it --cpuset-cpus=0 centos grep processor /proc/cpuinfo | wc -l docker run -it --cpuset-cpus=0 alpine grep processor /proc/cpuinfo | wc -l Client: Version: 17.09.0-ce API version: 1.32 Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:42:45 2017 OS/Arch: linux/amd64 Server: Version: 17.09.0-ce API version: 1.32 (minimum version 1.12) Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:41:24 2017 OS/Arch: linux/amd64 Experimental: false 

我在理解cpuset-cpus选项时错了吗? 如果是这样的话,我需要通过什么确切的参数来获得我期望的行为? ( grep processor /proc/cpuinfo | wc -l应输出1)

你的意思是你想使用更less的CPU或数量的CPU。 就像你想使用你的CPU的50%,或2个CPU的?

 $ docker run -it --cpuset-cpus="0-2" ubuntu:14.04 /bin/bash 

这意味着容器中的进程可以在cpu 0,cpu 1和cpu 2上执行。

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

似乎有一个关于https://github.com/moby/moby/issues/20770的问题

尝试使用类似的东西

 docker run --rm --cpuset-cpus=0,1 ubuntu sh -c "cat /sys/fs/cgroup/cpuset/cpuset.cpus" 

并检查是否有效。

希望能帮助到你。

据我所知,内核的CPU集不会以任何方式影响proc文件。