Как изменить размер виртуальной машины рабочего стола 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, которая помогла мне найти решение. Вкратце, рекомендация заключалась в том, чтобы просто изменить файл настроек напрямую. Я обнаружил, что сработало:

  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
Другие вопросы по тегам