如何阻止 docker 服務始終使用主機上分配的所有記憶體?

如何阻止 docker 服務始終使用主機上分配的所有記憶體?

Windows 10 上的 docker 服務似乎總是使用允許分配的最大記憶體量。例如,當我將“資源”->“高級”部分中的記憶體從 2GB 增加到 8GB 並單擊“應用並重新啟動”時,任務管理器中會發生以下情況:

在此輸入影像描述

如何讓 docker 僅在任何正在運行的容器需要時才使用內存,而不是僅僅將其全部消耗掉?

目前沒有容器正在運行,只有服務正在運行。

答案1

雖然 Docker 與全硬體虛擬化不同,但它的功能仍然有許多相同的方式,並且出於相同的原因。

虛擬機器管理程式保留給定量的內存,以便它們和容器(或虛擬機器)在需要時可以使用該內存,而無需向作業系統請求該內存。

您設定的設定專門用於此目的,其行為方式與您為此原因所觀察到的方式完全相同。它不是一個 bug,改變它的行為方式就是重寫 Docker 的基本行為。

因此,沒有任何問題,一切都按其應有的方式運作。

我強烈建議您閱讀 Docker 中的記憶體預留,以便更好地理解如何以及為什麼。 Docker 是一個成熟的產品,我認為有很好的文件記錄。

要「解決」您遇到的問題,請安裝更多內存或更仔細地規劃您的 Docker 內存需求,並按設計使用此設置,而不是像現在那樣隨心所欲。

答案2

使用 WSL2 後端運行較新版本的 docker Desktop 可以解決此問題。我無法提供比這更多的細節,因為我自己也不太了解它,但我已經安裝了 WSL2 並注意到 docker 現在動態分配記憶體。

Docker Desktop 使用 WSL 2 中的動態記憶體分配功能來大幅改善資源消耗。這意味著,Docker Desktop 僅使用所需的 CPU 和記憶體資源,同時使 CPU 和記憶體密集型任務(例如建置容器)運行得更快。

來源:Docker 桌面 WSL 2 後端

相關內容