Без рубрики

Проблема запуска Docker Desktop на Windows 11

Не так давно я стал обладателем нового ноутбука, вместе с которым в комплекте шла новая (на момент написания этой статьи) операционная система от Microsoft. Довольно быстро я столкнулся с проблемой, которая блокировала возможность работать с различными проектами — у меня не запускался Docker Engine. «Сейчас пофиксим» — подумал я и пропал для мира на пять часов. Надеюсь, информация, которую я раскопал, поможет кому-то сэкономить бесценное время

Для начала расскажу о симптомах и самом решении, которое можно использовать, не читая весь материал, а затем расскажу, как же я его накопал.

Что имеем на входе и какие симптомы видим:

  1. Windows 11 Home, Core i5 12450H, WSL2 на борту
  2. При запуске Docker Desktop зависает в состоянии Docker starting и висит так бесконечно.

Решение состоит в том, чтобы слегка подтюнить настройки безопасности Windows:

  1. Открываем «Безопасность Windows» («Windows Security»)
  2. Выбираем «Контроль приложений и браузера» («Apps & Browser control»)
  3. Выбираем «Exploit protection settings» в самом низу («Exploit protection settings»)
  4. Переключаемся во вкладку «Настройка программ» («Program settings»)
  5. Ищем в списке «C:\WINDOWS\System32\vmcompute.exe». Если в списке нет, то нажимаем «Добавить» и вводим указанный адрес.
  6. Наживаем редактировать («Edit»)
  7. Находим «Code flow guard (CFG)» и отключаем перегрузку системных настроек («Override system settings»)
  8. Запускаем vmcompute в powershell командой «net start vmcompute» (хотя, этот шаг выполнять необязательно, мне хватило только перезагрузки)

Теперь расскажу подробнее про симптомы и свои изыскания.

Первым делом я подумал, что из-за издания Home мой ноутбук не хотел работать с Hyper-V, и это влияло на работу Docker. В настройках системы я просто не видел пункта Hyper-V. Здесь я применил найденный скрипт, который включает возможность работы с Hyper-V

Get-ChildItem $Env:SystemRoot\servicing\Packages\*Hyper-V*.mum | % { 
    
    dism /online /norestart /add-package:"$($_.FullName)"
}

dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /All

Это не помогло. И я стал смотреть на то, какие симптомы показывает debug докера. В момент старта я попытался выполнить сброс

Но сброс не срабатывал. Я стал исследовать, что же он делает. И по факту он выполняет две команды

wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

Я попробовал выполнить эти команды из powershell, но они также намертво зависают и не выполняются. При попытке вывести доступные виртуалки в wsl командой

wsl -l -v

после запуска Docker Desktop тоже результата не было. Команда отлично выполняется при этом до момента запуска. Выводит она

docker-desktop    Installing    2

То есть виртуалка не ставится никак. Дальше я попробовал просто установить любую виртуалку. Например

wsl --install -d Debian

После запуска появляется окно сборки, но в нём точно также «вечно» висит надпись

This may take several minutes...

Именно это сообщение помогло мне выйти на тред обсуждения бага WSL в официальном репозитории Microsoft. То есть, проблема заключается здесь не в самом Docker, но в подсистеме WSL, которая из-за настроек безопасности операционной системы не может корректно запускать виртуальные машины.

Из комментариев ниже видно, что Windows 11 сборки 22h2 22623.1245 может «из коробки» запускать только WSL 1, а для корректной работы WSL 2 требуется дополнительная настройка.

Проблема запуска Docker Desktop на Windows 11: 4 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *