Docker为容器保留一定的内存

我在npm容器中运行npm ,每npm就会中止,因为它不能分配足够的内存。 我看到一些像--memory ( 我如何设置资源分配给容器使用docker? )的docker run命令,似乎限制容器可以消耗的最大内存量,但还没有看到任何东西将允许我为容器保留一定数量的内存,并在不能分配时立即中止。

这不是Linux下的内存pipe理。

如果您运行完整的虚拟化,如QEMU,则可以分配所有内存并将其传递给虚拟机。 然后,VM启动内核,内存由VM中的内核pipe理。

在Docker或任何其他容器/命名空间系统中,内存由运行docker和“容器”的内核pipe理。 在容器中运行的进程仍像普通进程一样运行,但在不同的cgroup 。 每个cgroup都有限制,比如内核将向用户空间分配多less内存,或者它看到什么networking接口,但是它仍然运行在相同的内核上。

这样的一个类比是docker工人是一个“荣耀的限制”。 在此限制下的进程仍然像普通的Linux进程一样运行

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

就像你不能预先为Firefox分配内存一样,你不能预先为Docker容器分配内存。

你不能在docker中预留内存,只能用-memory来限制它。

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

具体看用户内存约束部分。

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

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

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