我试图让Docker在我的硬件上使用所有可用的CPU内核(4)。 Docker只能看到一个CPU内核:

$ docker run --cpuset-cpus="0-3" -ti ubuntu bash
C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: Requested CPUs are not available - requested 0-3, available: 0.
See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.

如何使Docker使用所有可用的内核?

Docker文档声称将cpus标志设置为0.000会强制Docker使用所有可用的内核,但这对我不起作用:
$ docker run --cpus=0.000  -ti ubuntu bash
root@36855ab28928:/# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 58
model name      : Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
stepping        : 9
microcode       : 0x19
cpu MHz         : 2890.620
cache size      : 4096 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 cx16 pcid sse4_1 sse4_2 popcnt aes xsave avx rdrand hypervisor lahf_lm pti fsgsbase
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips        : 5781.24
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:
$ docker run --cpus=0.000 -ti ubuntu bash
root@6c1d6934a0fe:/# lscpu | head -n 10
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              1
On-line CPU(s) list: 0
Thread(s) per core:  1
Core(s) per socket:  1
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
root@6c1d6934a0fe:/#

我正在使用Docker Quickstart Terminal来获取上面看到的命令提示符。

我的物理硬件是Windows 10笔记本电脑。在Windows的Ubuntu上使用Bash:
$ lscpu | head -n 10
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  2
Core(s) per socket:  2
Socket(s):           1
Vendor ID:           GenuineIntel
CPU family:          6

我已经安装了Oracle VM Virtualbox,但是我不知道这是否与此有关。我是Docker的新手。有关堆栈溢出的其他答案(1)声称​​,默认情况下,所有CPU都可用,相反,在线找不到任何信息。我已经仔细阅读了Docker文档,却发现没有任何东西可以表明我需要做一些特殊的事情来解锁其他CPU内核。

最佳答案

这很可能是由于您安装了Docker。 Docker默认情况下可以使用所有系统资源。工具箱安装使用Virtualbox中的VM。您应该在Virtualbox上增加VM的资源。

如果您使用的是Windows 10,则不应使用Docker Toolbox,因为它仅适用于旧版OS(Win 7)。您应该使用Docker CE。

关于docker - 如何使Docker使用所有CPU内核?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57787802/

10-16 16:46
查看更多