我的docker容器有多少CPU?

时间:2018-03-07 11:53:17

标签: docker

我正在编写一个并行运行的库。该库通常在docker容器中使用。我想开始尽可能多的线程,因为我的docker容器已分配核心。

docker是否将CPU限制设置为某个环境变量?

例如,如果我的用户在创建容器时设置了两个CPU:

docker run --cpuset-cpus="2" myapp:latest

(见this question

如何通过检查容器的状态从容器中取回号码2

3 个答案:

答案 0 :(得分:2)

使用--cpuset-cpus="2"实际使用1个cpu。例如,如果您有4个可用:{0,1,2,3},则必须通过用逗号分隔或通过定义范围来指定其中的2个。来自docs

  

--cpuset-cpus

     

限制容器可以使用的特定CPU或核心。如果您有多个CPU,则容器可以使用的以逗号分隔的列表或连字符分隔的CPU范围。第一个CPU编号为0.有效值可能是0-3(使用第一个,第二个,第三个和第四个CPU)或1,3(使用第二个和第四个CPU)。

答案:

  • 获取可用的处理单元数:nproc
  • 获取cpu集:/sys/fs/cgroup/cpuset/cpuset.cpus

小例子如下:

  1. 主机:

    $ nproc
    4
    
  2. 带有1个cpu的容器:

    $ docker run --rm -it --cpuset-cpus="2" ubuntu
    root@73844de506db:/# nproc
    1
    root@73844de506db:/# cat /sys/fs/cgroup/cpuset/cpuset.cpus
    2
    
  3. 3 cpus的容器:

    $ docker run --rm -it --cpuset-cpus="0-2" ubuntu
    root@4c3f841e613b:/# nproc
    3
    root@4c3f841e613b:/# cat /sys/fs/cgroup/cpuset/cpuset.cpus
    0-2
    

答案 1 :(得分:0)

根据设计,Docker容器与底层主机系统隔离,因此您不应该向Docker询问“我有多少CPU核心”。

使用/ proc / cpuinfo似乎对我不起作用,它总是告诉我容器内的1个cpu。

在Github上查看this issue描述了以迂回方式解决问题的过程。最后,这个方法会查看cgroup以确定哪些核心可用,我认为这对您有用:

cat /sys/fs/cgroup/cpuset/cpuset.cpus

答案 2 :(得分:0)

/ proc / cpuinfo,/ proc / meminfo等文件未命名空间。在容器中,最好的方法是检查/sys/fs/cgroup/cpuset/cpuset.cpus以获取可用的CPU