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


Dockerが起動しなくて困った

```bash
$ docker ps
Error response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file specified.
```

# 事象 : Docker Desktopが「Docker is starting...」のままで起動しない
- 環境
    - Windows 10 Pro バージョン22H2
    - Docker version 20.10.22, build 3a2c30b
    - Docker Desktop 4.16.3 (96739)
    - WSL 2 Ubuntu

<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1743295/b57b3223-0a8a-f49b-de34-5e02b23570b3.png">

「Docker Desktopの再起動」「PCの再起動」をしても状況が変わらない・・・Errorダイアログの内容もよくわからない・・・

<details><summary>Errorダイアログの内容</summary><div>

```log
Docker.Core.HttpBadResponseException:
{"message":"1 error occurred:\n\t* starting WSL integration service: synchronising agents: starting added distros: 1 error occurred:\n\t* waiting for WSL integration for Ubuntu: timed out while polling for WSL distro integration to become ready in \"Ubuntu\"\n\n\n\n"}

   場所 Docker.Core.GoBackend.GoBackendClient.<PostNoBodyWithError>d__19.MoveNext() 場所 C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.Core\GoBackend\GoBackendClient.cs:行 226
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 Docker.Engines.WSL2.LinuxWSL2Engine.<DoStartAsync>d__11.MoveNext() 場所 C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.Engines\WSL2\LinuxWSL2Engine.cs:行 54
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 Docker.ApiServices.StateMachines.TaskExtensions.<WrapAsyncInCancellationException>d__0.MoveNext() 場所 C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\TaskExtensions.cs:行 29
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__6.MoveNext() 場所 C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:行 91
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   場所 Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__6.MoveNext() 場所 C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:行 118
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 Docker.ApiServices.StateMachines.EngineStateMachine.<StartAsync>d__15.MoveNext() 場所 C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\EngineStateMachine.cs:行 72
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 Docker.Engines.Engines.<StartAsync>d__23.MoveNext() 場所 C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.Engines\Engines.cs:行 109
```
</div></details>

## 原因 : 不明
WSL 2でなんかうまくいっていないらしいが・・・能力の不足でいまいち理解できない・・・。
[Docker Desktop Will Not Start · Issue #13184 · docker/for-win](https://github.com/docker/for-win/issues/13184)

### 対応1 : WSL 2を止めてDocker Desktopを再起動する
1. `wsl --shutdown`で仮想マシンを終了
    1. 注意 : コンテナはきれいさっぱり消える
1. Docker Desktopを再起動する
    1. ここで起動するようになった
1. `docker-compose up -d --no-recreate --build`でコンテナを再作成する
    - 「ERROR: docker endpoint for "default" not found」になった場合の対応
        - Visual Studio Codeの拡張機能で作ったコンテナが「Dev Containers: Open Folder in Container...」から起動しない・・・ログを見ると「ERROR: docker endpoint for "default" not found」と出力されていた・・・そんな時の対応方法
        - 対応 : `~/.docker/contexts/meta/{長い英数字}/meta.json`を削除してからコンテナを起動する
        - 参考 : [【VSCode・docker】「docker endpoint for &quot;default&quot; not found」を解決する！ - BFT名古屋 TECH BLOG](https://bftnagoya.hateblo.jp/entry/2023/02/06/092349)

```bash
# WSL 2を止める
$ wsl --shutdown

# コンテナはきれいさっぱり消える
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

# 地道にコンテナを作り直す
$ docker-compose up -d --no-recreate --build
Creating network "docker_default" with the default driver
...省略...
```


### 対応2 : Doccker Desktopをアップデートする
今日もDockerが起動しなくて困る。

1. `wsl --shutdown`で仮想マシンを終了
    - コンテナは削除されなかった(消えることもあるので注意)
1. Docker Desktopを再起動する
    - この時点ではまだ`Error response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file specified.`になる
1. Doccker Desktopの[Software updates]にアップデートが来ていたので「Docker Desktop 4.17.0」へアップデートする
1. 正常に起動する