我的docker容器有多少个CPU?

14 浏览
0 Comments

我的docker容器有多少个CPU?

我正在编写一个可以并行操作的库。这个库经常在Docker容器中使用。我想要启动与我的Docker容器分配的核心数量相同的线程。

Docker是否将CPU限制设置为环境变量?

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

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

(参见这个问题

通过检查容器的状态,我如何在容器内获得数字2

0
0 Comments

在Docker容器中,使用文件如/proc/cpuinfo、/proc/meminfo等来查看CPU信息是不准确的。这是因为这些文件不是被隔离的,而是共享的。为了解决这个问题,我们可以通过检查/sys/fs/cgroup/cpuset/cpuset.cpus文件来获取可用的CPU数量。

下面是一个示例代码,展示了如何在Docker容器中获取CPU数量:

#!/bin/bash
cpu_count=$(cat /sys/fs/cgroup/cpuset/cpuset.cpus | tr ',' '\n' | wc -l)
echo "The Docker container has $cpu_count CPUs."

通过运行上述代码,我们可以得到Docker容器中可用的CPU数量。

需要注意的是,这种方法仅适用于使用cgroups作为容器隔离技术的情况。如果使用的是其他容器技术,可能需要使用不同的方法来获取CPU数量。

总结起来,为了获取Docker容器中的CPU数量,我们需要注意到/proc/cpuinfo等文件在容器中不是隔离的,而是共享的。因此,我们可以通过检查/sys/fs/cgroup/cpuset/cpuset.cpus文件来获取可用的CPU数量。通过使用适当的代码,我们可以轻松地获取这个信息。

0
0 Comments

Docker容器是被设计成与底层主机系统隔离的,因此不能直接通过Docker来获取"我有多少个CPU核心"的信息。

使用/proc/cpuinfo方法在容器中似乎不起作用,它总是告诉我容器内只有一个CPU。

查看Github上的这个问题描述了一种绕过的方法来解决这个问题。最终,这种方法通过查看cgroup来确定可用的核心,并且我认为这对你也会起作用:

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

0
0 Comments

Docker容器中的CPU数量是一个常见的问题。在使用--cpuset-cpus="2"这样的参数时,实际上只使用了一个CPU。在文档中解释了如何使用--cpuset-cpus参数来限制容器使用的特定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:/# nproc
1
root:/# cat /sys/fs/cgroup/cpuset/cpuset.cpus
2

3. 使用3个CPU的容器:

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

通过以上示例,可以看出使用--cpuset-cpus参数可以限制容器使用的CPU数量,从而实现对CPU资源的控制和优化。

0