我如何阻止 docker 服务始终使用主机上分配的所有 RAM?

我如何阻止 docker 服务始终使用主机上分配的所有 RAM?

Windows 10 上的 docker 服务似乎总是使用允许分配的最大内存量。例如,当我在资源 -> 高级部分中将内存从 2GB 增加到 8GB 并单击“应用并重新启动”时,任务管理器中发生了以下情况:

在此处输入图片描述

我怎样才能让docker仅在任何正在运行的容器需要时使用内存,而不是全部消耗掉?

当前没有运行任何容器,只有服务。

答案1

尽管 Docker 与完全硬件虚拟化不同,但它仍以许多相同的方式和出于相同的原因运行。

虚拟机管理程序保留给定数量的内存,以便当它们和容器(或虚拟机)需要时可以使用这些内存,而无需向操作系统申请这些内存。

您设置的设置专门用于此目的,并且其行为方式与您观察到的正是出于此原因。这不是错误,更改其行为方式就是重写 Docker 的基本行为。

所以,一切都没有损坏,一切都正常运转。

我强烈建议您阅读 Docker 中的内存预留,以便更好地理解内存预留的原理和原因。Docker 是一款成熟的产品,我认为文档齐全。

为了“解决”您遇到的问题,请安装更多内存或更仔细地规划您的 Docker 内存需求,并按照设计使用此设置,而不是像现在这样一时兴起。

答案2

使用 WSL2 后端运行较新版本的 docker 桌面可以解决此问题。我无法提供更多细节,因为我自己也不太了解,但我已经安装了 WSL2 并注意到 docker 现在可以动态分配内存。

Docker Desktop 使用 WSL 2 中的动态内存分配功能,大大改善了资源消耗。这意味着,Docker Desktop 仅使用其所需的 CPU 和内存资源量,同时使构建容器等 CPU 和内存密集型任务运行得更快。

来源:Docker Desktop WSL 2 后端

相关内容