如何在Windows上为Docker Linux容器减少默认VM内存

8

场景

  • Windows 10 Professional
  • Docker 18.06.1-ce 运行在 Windows 容器模式下
  • 主机系统上有 4GB 可用内存
  • 使用 Hyper-V 虚拟机

问题

当尝试通过 Docker 任务栏项“切换到 Linux 容器”时,经过几秒钟的处理后该进程失败,并显示关于“启动 Docker 所需的内存不足”的错误。

Not enough memory to start Docker

因为主机系统没有那么多内存,我想要减少全局 Docker 机器允许使用的最大内存(我认为这里默认值是 2 GB)。因此,我想把它降低到只有 1 GB。

当 Docker 运行在 Windows 容器模式下时,在 Docker 的设置中没有“高级”部分可以轻松地重新分配内存。

No "advanced" section in order to change memory assignment

我能够在 Windows 的 Hyper-V 管理器中找到“MobyLinuxVM”。然而,在那里调整内存设置时,每次我启动 Docker 并尝试再次切换到 Linux 容器模式时都会被覆盖。

Hyper-V manager settings, that get overwritten again when starting Docker

问题

是否有不使用用户界面(在 Windows 容器模式下缺少“高级”部分)的其他方法来定义 Docker 的最大内存量?


安装一个简单的Linux虚拟机,然后在其中使用Docker。 - Ijaz Ahmad
你是在说使用例如VirtualBox来运行Docker,还是有其他的东西? - Oliver Hader
使用任何虚拟化工具安装带有1GB RAM的Linux虚拟机,然后您可以在其中安装Docker。 - Ijaz Ahmad
谢谢您的建议,但似乎不太可行,因为这会使主机和客户系统之间的卷共享变得更加困难(因为必须向中间的Linux VM进行广告宣传)。除此之外,这感觉有点像“VM内部”;-) - Oliver Hader
将 Docker 的内存分配从“设置”-“高级设置”中的 2048 Mb 减少到 1536 Mb,问题得以解决。虽然有点奇怪,但确实有效! - Aryashree Pritikrishna
1个回答

25

经过一番搜索,我发现Docker用户界面的设置存储在%APPDATA%\Docker\settings.json文件中(例如:C:\Users\olly\AppData\Roaming\Docker),内存设置被定义在memoryMiB属性中。

以下操作解决了我的问题:

  • 退出Docker
  • 使用运行命令提示符中的notepad %APPDATA%\Docker\settings.json命令修改settings.json文件(通过Windows-Key + R打开运行命令提示符)
  • memoryMiB的值从之前的2048调整为1024
    • Docker 19.x及更高版本使用该属性名称
    • Docker 18.x及更早版本使用VmMemory属性名称
  • 保存settings.json
  • 启动Docker并最终能够使用“切换到Linux容器”选项

Docker 19.x及更高版本中的memoryMiB属性

修改settings.json中的memoryMiB

Docker 18.x及更早版本中的VmMemory属性

修改settings.json中的VmMemory


7
谢谢Oliver Hader,我使用了你的解决方案,但是找不到VmMemory,所以我尝试将memoryMiB更改为1024,这样就可以了。希望这能帮助其他人。 - Jambu
@Jambu 谢谢你的提示,我终于更新并调整了最近 Docker 版本的答案和截图。 - Oliver Hader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接