Docker为容器保留了一定的内存

时间:2016-02-03 20:18:46

标签: docker

我在docker容器中运行npm并且每次都会中止,因为它无法分配足够的内存。我看到--memory docker run命令的一些标志似乎限制了容器可以消耗的最大内存量,但是还没有看到任何东西允许我为容器保留一定量的内存,如果无法分配则立即中止。

2 个答案:

答案 0 :(得分:4)

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

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

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

与此类比的是,码头工具是“荣耀的ulimit”。此限制下的进程仍然表现为正常的Linux进程

  1. 他们根据需要分配内存
  2. 如果他们通过了一些限制,或者主机内存不足,他们将导致OOM问题
  3. 就像你不能为Firefox预先分配内存一样,你无法为Docker容器预先分配内存。

答案 1 :(得分:1)

您无法在docker中保留内存,只能使用--memory限制它。

有关详细信息,请参阅:https://docs.docker.com/engine/reference/run/

具体看一下用户内存限制部分。

  

memory = inf,memory-swap = inf(默认)>>>>没有内存限制   容器。容器可以根据需要使用尽可能多的内存。

请注意,这是默认值。因此,与系统上的其他进程一样,npm将使用它可以获得/需要的所有进程。

所以要么释放一些内存,要么添加更多内存。