Docker为容器保留一定数量的内存

Gre*_*bet 2 docker

我在npmdocker容器中运行,并且由于无法分配足够的内存而经常中止。我在命令中看到一些标志--memory(例如如何使用docker设置分配给容器的资源?docker run,似乎限制了容器可以消耗的最大内存量,但是还没有看到任何可以允许我保留的内存容器的内存量,如果无法分配,则立即中止。

use*_*419 6

这不是Linux下内存管理的工作方式。

如果您运行完全虚拟化(例如QEMU),则可以分配所有内存并将其传递到VM中。然后,该VM引导内核,并且内存由VM中的内核管理。

在Docker或任何其他容器/命名空间系统中,内存由运行docker和“容器”的内核管理。在容器中运行的进程仍然像正常进程一样运行,但运行方式不同cgroup。每个cgroup都有限制,例如内核将向用户空间分配多少内存,或看到的网络接口是什么,但它仍在同一内核上运行。

与此类似,码头工人是“荣耀的ulimit”。低于此限制的进程仍然像正常的Linux进程一样运行

  1. 他们根据需要分配内存
  2. 如果超过某个限制,或者主机内存不足,它们将导致OOM问题

就像您无法为Firefox预先分配内存一样,您也无法为Docker容器预先分配内存。