Как изменить размер виртуальной машины рабочего стола Docker в Windows 10 с помощью сценария PowerShell?
Я пытаюсь написать сценарий PowerShell (с использованием ядра PS 7.0) для установки и настройки кластера Kubernetes, работающего на Kind на машинах с Windows 10, используемых моими командами. У меня есть рабочий сценарий для запуска и настройки кластера, единственная проблема заключается в том, что я хотел бы (должен) убедиться, что виртуальная машина Docker Desktop имеет достаточно памяти для одновременного запуска нескольких наших микросервисов внутри кластера.
У меня есть немного кода, сколоченного вместе для выполнения задачи, и он работает до самого последнего шага, на котором я пытаюсь заставить демон докера снова работать после перезапуска. Как только я запускаю команду для этого, виртуальная машина восстанавливается до своего предыдущего размера памяти.
Вот что мне нужно для изменения размера:
Stop-Service *docker*
Get-VM DockerDesktopVM | Stop-VM
Get-VM DockerDesktopVM | Set-VMMemory -StartupBytes 12888MB
Get-VM DockerDesktopVM | Start-VM
Start-Service *docker*
# https://stackru.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
Примечание: я нашел сообщение @ Как перезапустить докер для процесса Windows в PowerShell? где я получил последние 2 строки.
При дальнейшем исследовании проблемы я обнаружил, что могу использовать вместо нее следующую единственную строку, но у меня все еще есть та же проблема, заключающаяся в том, что размер памяти возвращается обратно после выполнения команды.
&$Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchLinuxEngine
Если я не запустил DockerCli.exe -SwitchDaemon дважды или DockerCli.exe -SwitchLinuxEngine один раз, то я получаю сообщение об ошибке:
ошибка во время подключения: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/containers/json: open //./pipe/docker_engine: система не может найти указанный файл. В конфигурации демона по умолчанию в Windows для подключения клиент-докер должен быть запущен с повышенными правами. Эта ошибка также может указывать на то, что демон докера не запущен.
Есть ли лучший способ изменить размер памяти виртуальной машины или выключить и перезапустить докер, не вызывая отмены изменения?
1 ответ
Для всех, кто пытается сделать то же самое или что-то подобное, я получил подсказку от сообщества Docker Desktop для Windows на GitHub, которая помогла мне найти решение. Вкратце, рекомендация заключалась в том, чтобы просто изменить файл настроек напрямую. Я обнаружил, что сработало:
- Остановите службы 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