Docker 桌面吃掉所有内存并崩溃

kos*_*ych 6 docker docker-desktop

在 Windows 10 中使用带有 6 个容器的 Docker Desktop (19.03.13)。具有 16GB RAM。

docker stats每个容器中消耗 20-500 mb,总共消耗 ~1gb。

但是在任务管理器中,docker 消耗了大约 10gb,并且由于系统内存不足而崩溃。

如何检查,什么在 docker 中消耗了这么多内存?以及如何防止这种情况?

Leo*_*Leo 44

尝试.wslconfig在 User 文件夹的根目录下创建一个文件C:\Users\<my-user>来调整 Docker 将使用的内存和处理器数量。

这是文件的内容.wslconfig

[wsl2]
memory=2GB   # Limits VM memory in WSL 2 up to 2GB
processors=2# Makes the WSL 2 VM use two virtual processors
Run Code Online (Sandbox Code Playgroud)

然后,重新启动计算机。您会发现该Vemm进程只会占用您之前定义的 RAM 量。

您可以在这里了解更多信息


小智 11

如果您使用 WSL2,请将 .wslconfig 放入 ram 的中间。我不知道为什么,但我在使用 8GB RAM 时也遇到了同样的问题。

这是我的.wslconfig

[wsl2]
memory=4GB # I have 8GB RAM
processors=2 
Run Code Online (Sandbox Code Playgroud)

结果很好,因为消费好!此时我正在运行一个包含 8 个镜像的 Docker:

结果如下


Abd*_*dan 5

我猜您正在使用基于 WSL 2 的新引擎,请尝试通过打开-> -> uncheck将docker 引擎切换回 Hyper-Vdocker settingsgeneralUse WSL 2 based Engine

解释:

我注意到自从引入 WSL 2 引擎以来它开始发生在我身上,我自动切换到它,因为它是一个新引擎;从那以后开始出现内存问题。

重新启动/关闭 docker 并没有释放内存,我在任务管理器Vemm中注意到它占用了所有内存,因此不得不强制关闭它(导致 docker 无法工作)。

我做的最后一件事是将 docker 引擎切换回 Hyper-V解决了我的高内存使用率。


Bea*_*ans 5

我的 docker 现在占用的 cpu 不到 2%。

将 .wslconfig 更新为:

[wsl2]
memory=8GB
swap=2000
processors=4
Run Code Online (Sandbox Code Playgroud)

...然后重新启动 Docker,CPU 消耗仍然超过 80%,并且 Windows 任务管理器中有 5 个 Docker Desktop 进程(每个进程占用 17-18%)。我将 Docket 重置为出厂设置,CPU 仍然停留在 80% 或更高。

然后,我按照 jmichalek-fp 的建议删除了 .docker 文件夹(在 Windows 中,路径为 %USERPROFILE%/.docker)。我小心翼翼地执行了 Shift-DEL 操作,以免将其移动到回收站,因为我记得过去回收的项目仍然可以由持有该文件链接的进程找到。

恢复出厂设置,然后增加 .wslconfig 资源,然后删除 .docker 文件夹,然后重新启动 Docker 后,它现在只运行一个 Docker Desktop 进程,并且在其中运行 NodeJs 应用程序,它消耗 0.5% 到 2% 的 CPU 。

我在此 github 问题中找到了“删除 .docker 文件夹”:https://github.com/docker/for-win/issues/12266


use*_*936 -6

我猜测 Windows 上的内容与 MacOS 上的内容类似。

  1. 打开您的 Docker 应用程序并转到仪表板
  2. 单击任意容器
  3. 点击Stats

您将获得有关 CPU、RAM 使用情况、磁盘读写内存和网络使用情况的信息。

在此输入图像描述

当我经常遇到内存问题时,我会设置别名脚本,我可以将它们链接在一起以停止/终止/重新启动,并在容器上执行我需要的任何设置。

除非您想开始贡献并发出拉取请求,否则无法阻止 docker 的行为方式。这并不是一个罕见的问题。Docker 是一项免费服务,我建议解决它的缺点。