2

我正在尝试编写一个 PowerShell 脚本(使用 PS core 7.0)来安装和配置在我的团队使用的 Windows 10 机器上运行的 Kubernetes 集群。我有一个启动和配置集群的工作脚本,唯一的问题是我想(需要)确保 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

注意:我找到了帖子@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:系统找不到指定的文件。在 Windows 上的默认守护程序配置中,docker 客户端必须运行提升才能连接。此错误还可能表明 docker 守护程序未运行。

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

4

1 回答 1

2

对于正在尝试相同事情或类似事情的其他人,我从 GitHub 上的 Docker Desktop for Windows Community 获得了提示,帮助我找到了解决方案。简而言之,建议是直接更改设置文件。我发现有效的是:

  1. 停止 Docker 服务(有 2 个)
  2. 更新设置文件 (@ ~\AppData\Roaming\Docker\settings.json)
  3. 启动 Docker 服务
  4. 将守护进程上下文切换到 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
于 2020-03-20T13:10:56.810 回答