Найти в Дзене
About iT

Настраиваем docker: Error response from daemon: open \\.\pipe\docker_engine_windows: The system cannot find the file specified.

Итак, продолжаю ублажать Docker. Теперь очередь дошла до WindowsEngine. Ошибка такая:

docker: Error response from daemon: open \\.\pipe\docker_engine_windows: The system cannot find the file specified.

При выполнении:

docker run --name repo alpine/git clone
https://github.com/docker/getting-started.git

в PowerShell, запущенном с административными привилегиями.

Docker Desktop 4.16.1 (95567) is currently the newest version available.
Host - Windows 10.

После загрузки компьютера выбирается LinuxEngine, но я переключился на WindowsEngine с помощью DockerCli (кстати можно через контекстное меню значка Docker Desktop в трее). Пробую перезапустить Docker Desktop через значок в трее. Не помогло.

Открываю Диспетчер Hyper-V (от админа), справа, в действиях - Параметры Hyper-V..., ничего интересного. Нет виртуалки, вот что подозрительно.

Net start/stop com.docker.service не помогает, как впрочем (что, вроде бы, одно и то же) и перезапуск Docker Desktop Service через оснастку управления службами виндофсь (да я и не ожидал).

Кстати, указанная в начале статьи ошибка вылезает при выполнении любой команды Docker, например: docker config ls.

Ну трубы действительно нет, не поспоришь:
[System.IO.Directory]::GetFiles("\\.\\pipe\\") > temp.txt

В настройках Docker Desktop пробую отключить WSL 2. Далее Apply & restart. Не помогло. Переустанавливать эту срань не хочу (не делать же это каждый раз при switch engine. С другой стороны зачем его вообще switchить? Сидел на Linux и бед не знал бы, но).

Прикол в том, что теперь не удается поставить галку WSL 2 - делаю Apply & restart, возвращаюсь в Settings и нитуя эта е?у?ая галка не стоит. Теперь не удается переключиться на Linux containers - ясен хер, ведь WSL то вырублен. Ну мудилы, а... Долго что-то запускается Docker, потом крашится и отображается Docker Desktop stopped... Настройки теперь тоже недоступны, так как дохер помер. Отлично просто. Впрочем, справедливости ради, надо сказать что после еще одного рестарта и свича на виндовс контейнерс докер таки ожил и даже галка всл 2 поставилась. Проверю сохранилась ли работоспособность линуксовых контейнеров. Переключаюсь на LinuxEngine. Как бы да, но у меня там был контейнер. Так вот он просрался - нет его, нетути. Оооо, прекрасно: при

docker run -d -p 80:80 docker/getting-started

вернулась ошибка

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

Ну-ка, может винданутые контейнеры заработали? Switch to Windows Containers... docker run --name repo alpine/git clone
https://github.com/docker/getting-started.git... Хуй, простите. WSL сдох? Нет, работает. Пора перезагрузить комп.

Вот ведь чудо-то из чудес-с! После ребута и открытия Docker Desktop от админа контейнер снова виден через Docker Desktop. И даже запускается, и работает, и останавливается.

Вернемся к теме запуска windows containers. На SO видел мужика, который советовал перейти в "C:\Program Files\Docker\Docker". Его не поняли, но тут (https://forums.docker.com/t/error-response-from-daemon-open-pipe-docker-engine-windows-the-system-cannot-find-the-file-specified/131750?page=2) тоже есть такой мужик, к счастью с нормальным скиллом выражения мыслей. Пробую:

> Push-Location "C:\Program Files\Docker\Docker\"
> .\DockerCli.exe -SwitchDaemon
> Pop-Location

Даёмон! Не, не работает. Судя по форуму, с v4.14.1 (91661) Docker настолько хорошо сделали "более лутшим", что поддержка форточек снова канула. Ну прям Дик Дайвер. Невозможно улучшено. Вариант откатиться на 4.13, но я лучше просто забью на Windows Containers если не получится.

> Enable-WindowsOptionalFeature -Online -FeatureName Containers -All
Перезагрузка

> Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
FeatureName : Microsoft-Hyper-V
DisplayName : Платформа Hyper-V
Description : Предоставляет службы, которые можно использовать для создания виртуальных машин и их ресурсов, а также для управле
ния ими.
RestartRequired : Possible
State : Enabled
CustomProperties :

Enabled - отлично.

docker run --name repo alpine/git clone
https://github.com/docker/getting-started.git

Сдвинулось с мертвой точки. Теперь (естественно) команда, данная в getting started guide не фурычит.

Unable to find image 'alpine/git:latest' locally
latest: Pulling from alpine/git
docker: no matching manifest for windows/amd64 10.0.19044 in the manifest list entries.

docker run -d -p 80:80 docker/getting-started
Эта тоже.

Впрочем труба нашлась и супер. Наверное послезавтра буду пробовать стартануть-таки какой-нибудь контейнер на WindowsEngine.

Вывод статьи: надо было активировать фичу "Containers". Ибо разработчики дистрибутива Docker сделать сие не смогли.