Найти тему
About iT

Docker. Запуск контейнера docker/getting-started на LinuxEngine

Очередная проблема с Докуром - не удается стартануть "учебный" контейнер. Смотрите сами - не работает ни на линуксовом, ни на виндовом движке:


> cd "C:\Program Files\Docker\Docker\"

> .\DockerCli.exe -SwitchWindowsEngine
> docker run -d -p 80:80 docker/getting-started


docker: Error response from daemon: open \\.\pipe\docker_engine_windows: The system cannot find the file specified.
See 'docker run --help'.

> .\DockerCli.exe -SwitchLinuxEngine
> docker run -d -p 80:80 docker/getting-started

docker: error during connect: This error may indicate that the docker daemon is not running.: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/create": open //./pipe/docker_engine: The system cannot find the file specified.
See 'docker run --help'.

Пытаюсь перезапустить Docker через пункт Restart контекстного меню значка в трее. Вернулась вчерашняя проблема с незапускающимся Докером. Надо вручную включиться в движок:

> .\DockerCli.exe -SwitchWindowsEngine

Проверяю, ушла ли ошибка. С чего бы? Нет, не ушла.
Пробую повторить с elevated PowerShell. Тот же результат (да я и не сомневался).

Вспоминаю, что установка новая, а Docker теперь требует Hyper-V для работы с Windows (для того чтобы крутить MobyLinuxVm как host VM - см.
https://stackoverflow.com/questions/52574789/docker-in-windows-need-hyper-v-enabled). Пытаюсь активировать данную фичу (см. https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v). Всего-то надо в elevated PowerShell выполнить:

> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

Потребуется перезагрузка. После того, как компьютер будет перезапущен, снова пробую выполнить команды, указанные в начале статью, то бишь переключение на windows_engine и старт контейнера docker/getting-started.

Вот же собачье отродье женского рода!

Смотрю so called Диспетчер Hyper-V. Виртуалок нет. Перезапуск докера через трей. Повторная попытка - без толку. Попробую переустановить докер, может надо было сначала активировать Hyper-V (а че они в установщике не осилили активировать гипервизор-то).

Ха, вот значит где собака зарыта - они при установке рекомендуют (recommend) использовать WSL 2 вместо Hyper-V. Прям деприкейшн на деприкейшне. Ну ладно, WSL 2, так WSL 2. Помнится, вчера были проблемы с тем, что то-ли до, то-ли во время установки (не проверял) Docker Desktop встал WSL (который 1). Установка Docker, кстати инициировала запуск обновлений, а WSL не является компоментом ОС и опция обновления продуктов Microsoft при накате обновлений у меня выключена (применено умолчание). Поэтому WSL не обновился. Вчера обновил путем вызова wsl --update, но ужЭ после установки Docker. Что-ж попробую установить Docker еще раз, может с обновленным WSL 2 на этот раз все срастется.

Так, повторный ребут не требуется - вероятно я на правильном пути (ну или все апдейты уже установлены, но может в этом и смысл: утром апдейты, а вечером Docker). Но я на всякий противопожарный все-равно перезагружусь. Виндофсь все-таки.

Docker традиционно не стартует, выбираю WindowsEngine. И кстати теперь надо-таки после этого переоткрывать окно Docker Desktop, причем теперь, как и пишут на SO, от админа.

И тем не менее все эти мытарства не помогли. Б...ь! Библиотекарь то есть.

> net stop com.docker.service
> net start com.docker.service

Нет, не то. LinuxEngine тоже не фурычит.

Перезапусе Docker Desktop Service в Services. Бестолку.

И тут я такой: бл?, может поставить дистрибутив на wsl?

> wsl --list --online
> wsl --install SLES-15

Однако, нельзя просто взять и поставить дистро:

Installing, this may take a few minutes...
Installation Failed!
Error: 0x80370102
Press any key to continue...

А SLES-12? Нет, тоже нельзя.

Может, у меня отключена виртуализация в BIOS? Иду в диспетчер задач. На вкладке Производительность, под графиком - Виртуализация: Отключено. Вот же блин.

Перезагрузка, дробь по F1 и F10 (не помню какая из них). В Advanced - Virtualization Technology (VTx). Save? - Sure. - Exit. - Exit? - Yes, exit. - Okay.

Кстати запустился Docker Desktop без ручного SwitchWindowsEngine. Но этого недостаточно для того чтобы стартануть контейнер. Значит попробую установить дистро на WSL 2 еще разок. На этот раз все хорошо (если у вас нехорошо - посмотрите вот тут может что найдется от мигрени:
https://appuals.com/wsl-register-distribution-error-0x80370102-on-windows-10/).

Делаю -SwitchLinuxEngine и docker run отрабатывает!

А вот как сделать то же самое на WindowsEngine я попробую разобраться, надеюсь, завтра. Ждите следующую статью.