我在docker容器中运行npm
并且每次都会中止,因为它无法分配足够的内存。我看到--memory
docker run
命令的一些标志似乎限制了容器可以消耗的最大内存量,但是还没有看到任何东西允许我为容器保留一定量的内存,如果无法分配则立即中止。
答案 0 :(得分:4)
这不是内存管理在Linux下的工作方式。
如果您运行完全虚拟化(如QEMU),则可以分配所有内存并将其传递到VM。然后,该VM引导内核,内存由VM中的内核管理。
在Docker或任何其他容器/命名空间系统中,内存由运行docker和“containers”的内核管理。在容器中运行的进程仍然像正常进程一样运行,但在不同的cgroup
中运行。每个cgroup
都有限制,比如内核向用户分发的内存量,或者它看到的网络接口,但它仍然运行在同一个内核上。
与此类比的是,码头工具是“荣耀的ulimit
”。此限制下的进程仍然表现为正常的Linux进程
就像你不能为Firefox预先分配内存一样,你无法为Docker容器预先分配内存。
答案 1 :(得分:1)
您无法在docker中保留内存,只能使用--memory限制它。
有关详细信息,请参阅:https://docs.docker.com/engine/reference/run/。
具体看一下用户内存限制部分。
memory = inf,memory-swap = inf(默认)>>>>没有内存限制 容器。容器可以根据需要使用尽可能多的内存。
请注意,这是默认值。因此,与系统上的其他进程一样,npm将使用它可以获得/需要的所有进程。
所以要么释放一些内存,要么添加更多内存。