如何从PowerShell脚本调整Windows 10上Docker桌面虚拟机的大小?

如何从PowerShell脚本调整Windows 10上Docker桌面虚拟机的大小?,powershell,docker,kind,Powershell,Docker,Kind,我正在尝试编写一个PowerShell脚本(使用PS core 7.0)来安装和配置Kubernetes群集,该群集在我的团队使用的Windows 10计算机上运行。我有一个工作脚本来启动和配置集群唯一的问题是我想(需要)确保Docker Desktop VM有足够的内存,可以同时在集群内运行我们的一些微服务 我已经拼凑了一些代码来执行这个任务,它一直工作到最后一步,我尝试在重启后让docker守护进程再次工作。只要我运行这个命令,VM就会重新配置回它以前的内存大小 以下是我必须执行的调整大小操

我正在尝试编写一个PowerShell脚本(使用PS core 7.0)来安装和配置Kubernetes群集,该群集在我的团队使用的Windows 10计算机上运行。我有一个工作脚本来启动和配置集群唯一的问题是我想(需要)确保Docker Desktop VM有足够的内存,可以同时在集群内运行我们的一些微服务

我已经拼凑了一些代码来执行这个任务,它一直工作到最后一步,我尝试在重启后让docker守护进程再次工作。只要我运行这个命令,VM就会重新配置回它以前的内存大小

以下是我必须执行的调整大小操作:

        Stop-Service *docker*

    Get-VM DockerDesktopVM | Stop-VM 
    Get-VM DockerDesktopVM | Set-VMMemory -StartupBytes 12888MB
    Get-VM DockerDesktopVM | Start-VM

    Start-Service *docker*

    # https://stackoverflow.com/questions/51760214/how-to-restart-docker-for-windows-process-in-powershell
    &$Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon
    &$Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon
注意:我找到了最后两行的帖子@

在进一步研究这个问题的过程中,我发现我可以使用下面的一行来代替,但我仍然存在同样的问题,即一旦命令运行,内存大小就会恢复

&$Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchLinuxEngine
如果我没有两次运行DockerCli.exe-SwitchDaemon或一次运行DockerCli.exe-SwitchLinuxEngine,则会出现以下错误:

连接期间出错:Get:open/./pipe/docker\u引擎:系统找不到指定的文件。在窗口上的默认守护程序配置中 s、 docker客户端必须提升运行才能连接。此错误还可能表示docker守护程序未运行


是否有更好的方法来调整VM内存的大小,或者关闭并重新启动docker而不导致更改被还原?

对于尝试相同操作或类似操作的其他人,我从GitHub上的docker Desktop For Windows社区得到了一个提示,帮助我找到了解决方案。简而言之,建议直接更改设置文件。我发现有效的方法是:

  • 停止Docker服务(共有2个)
  • 更新设置文件(@~\AppData\Roaming\Docker\settings.json)
  • 启动Docker服务
  • 将守护进程上下文切换到Linux(与以前相同,但在重新启动服务后,它似乎需要轻推来拾取内容)
  • 下面是PowerShell:

     Stop-Service *docker*
     $settingsFile = "$env:APPDATA\Docker\settings.json"
     $settings = Get-Content $settingsFile | ConvertFrom-Json
     $settings.memoryMiB = 8192
     $settings | ConvertTo-Json | Set-Content $settingsFile
     Start-Service *docker*        
     &$Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchLinuxEngine