2017-10-07 31 views
0

我想限制使用碼頭--cpuset-cpus選項的容器的CPU。但由於某種原因我沒有得到理想的結果。例如,下面的命令應該只打印1:限制碼頭集裝箱中的CPU核心

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)

回答

0

你的意思是你想使用更少的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" 

並檢查其是否正常工作的問題。

希望它有幫助。

0

就我所知,內核的CPU集不會以任何方式影響proc文件。