Не так давно я стал обладателем нового ноутбука, вместе с которым в комплекте шла новая (на момент написания этой статьи) операционная система от Microsoft. Довольно быстро я столкнулся с проблемой, которая блокировала возможность работать с различными проектами — у меня не запускался Docker Engine. «Сейчас пофиксим» — подумал я и пропал для мира на пять часов. Надеюсь, информация, которую я раскопал, поможет кому-то сэкономить бесценное время
Для начала расскажу о симптомах и самом решении, которое можно использовать, не читая весь материал, а затем расскажу, как же я его накопал.
Что имеем на входе и какие симптомы видим:
- Windows 11 Home, Core i5 12450H, WSL2 на борту
- При запуске Docker Desktop зависает в состоянии Docker starting и висит так бесконечно.
Решение состоит в том, чтобы слегка подтюнить настройки безопасности Windows:
- Открываем «Безопасность Windows» («Windows Security»)
- Выбираем «Контроль приложений и браузера» («Apps & Browser control»)
- Выбираем «Exploit protection settings» в самом низу («Exploit protection settings»)
- Переключаемся во вкладку «Настройка программ» («Program settings»)
- Ищем в списке «C:\WINDOWS\System32\vmcompute.exe». Если в списке нет, то нажимаем «Добавить» и вводим указанный адрес.
- Наживаем редактировать («Edit»)
- Находим «Code flow guard (CFG)» и отключаем перегрузку системных настроек («Override system settings»)
- Запускаем 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 комментария
Спасибо большое, очень помогло.
Человек! спасибо тебе большое ! весь день потратил на это!
Рад, что Вам помог мой совет! 🙂
Спасибо огромное! Просто включил CFG!)