如何通过 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 桌面得到了提示,这帮助我找到了解决方案。简而言之,建议是直接更改设置文件。我发现有用的是:
- 停止 Docker 服务(有 2 个)
- 更新设置文件(@~\AppData\Roaming\Docker\settings.json)
- 启动 Docker 服务
- 将 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
我正在尝试编写 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 桌面得到了提示,这帮助我找到了解决方案。简而言之,建议是直接更改设置文件。我发现有用的是:
- 停止 Docker 服务(有 2 个)
- 更新设置文件(@~\AppData\Roaming\Docker\settings.json)
- 启动 Docker 服务
- 将 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