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

How can I resize the Docker Desktop Virtual Machine on Windows 10 from a PowerShell script?

我正在尝试编写 PowerShell 脚本(使用 PS 核心 7.0)来安装和配置 Kubernetes 集群 运行ning on Kind on Windows 我团队使用的 10 台机器.我有一个启动和配置集群的工作脚本,唯一的问题是我想(需要)确保 Docker 桌面虚拟机有足够的内存可用于 运行 我们的一些微服务同时在集群内。

我拼凑了一些代码来执行任务,它一直运行到最后一步,我试图让 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*

    # 
    &$Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon
    &$Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon

注意:我找到了 post @ How to restart docker for windows process in powershell? ,这是我得到的最后两行。

在进一步研究这个问题时,我发现我可以改用下面的单行,但我仍然有同样的问题,因为一旦命令是 运行,内存大小就会恢复。

&$Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchLinuxEngine

如果我不运行 DockerCli.exe -SwitchDaemon 两次或DockerCli.exe -SwitchLinuxEngine 一次,那么我得到错误:

连接时出错:获取http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/containers/json:打开//。/pipe/docker_engine:系统找不到指定的文件。在 Window 上的默认守护程序配置中 s,docker 客户端必须 运行 提升才能连接。此错误还可能表明 docker 守护进程不是 运行ning.

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

对于尝试同样事情或类似事情的任何其他人,我从 GitHub 上 Windows 社区的 Docker 桌面得到了提示,这帮助我找到了解决方案。简而言之,建议是直接更改设置文件。我发现有用的是:

  1. 停止 Docker 服务(有 2 个)
  2. 更新设置文件(@~\AppData\Roaming\Docker\settings.json)
  3. 启动 Docker 服务
  4. 将 Daemon Context 切换为 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