【Day6】Docker Desktopが起動しなくなり泣きながら原因調査する

## はじめに

勉強とアウトプットを兼ねて、Webアプリ開発の記録を記事にしてみます。

個人のメモ的な側面が強いです。
Web開発初心者すぎて至らぬところだらけだと思いますが、暖かい目で見ていただければ幸いです。

↓ これまでの内容 ↓
[【Day0】アプリが完成するまで毎日投稿](https://qiita.com/midorigame/items/f9b9a445c945b4a837b1)
[【Day1】開発環境を考える](https://qiita.com/midorigame/items/e26344599e2ffaa22033)
[【Day2】開発環境を構築する、、、はずでした](https://qiita.com/midorigame/items/3f57f2691a8e1074adb8)
[【Day3】まずはフロントだけ開発環境を構築する](https://qiita.com/midorigame/items/9de27ba72aaef504a833)
[【Day4】バックエンドの開発環境を整えつつ、マルチコンテナ対応のDevcontainerにする](https://qiita.com/midorigame/items/5b95374cd85f715a6498)
[【Day5】お試し実装！ファイルをアップロードしてバックエンドで処理する](https://qiita.com/midorigame/items/9663f0063b95b501c08a)


## 前回のあらすじ

前回は作成した開発環境で試しにフロントエンドとバックエンドで画像データをやりとりする実装をしました！

これから本格的に実装するぞ～

## 今回の、、、泣

機能実装やる気満々で今日も開発しようと思ったら、Docker Desktopがうんともすんとも言わなくなってしまいました。

## Docker Desktopのエラー

私はWindows起動時のスタートアップにDocker Desktopを入れていましたが、今日PCを立ち上げたらDocker Desktopに「Docker Engine stopped」と表示され、以下のエラーコンソールが表示されました

```text
An unexpected error occurred
Docker Desktop encountered an unexpected error and needs to close.

Search our troubleshooting documentation ⁠ to find a solution or workaround. Alternatively, you can gather a diagnostics report and submit a support request or GitHub issue.

running engine: waiting for the Docker API: context deadline exceeded
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307348/11fa6e43-a384-45b8-962a-c92ff7db0d7f.png)

## 環境情報

現在使っている環境情報は以下の通りです。

- OS
    - Windows 11 Home
- WSL2
    - WSLバージョン : 2.5.7.0
    - カーネルバージョン : 6.6.87.1-1
    - OS : Ubuntu 22.04 LTS
- Docker Desktop
    - 4.34.2 (167172)

2025/06/07時点でのDocker Desktopの最新版は4.42.0 (195023)みたいです。
Docker Desktopが最新じゃないのでもしかしたらそれが原因か、、？

## やったこと

### Docker DesktopおよびWSLの再起動

まず初めにDocker Desktopの再起動を実施しました。
タスクマネージャーからDockerに関するものをすべて強制終了させました。

Docker DesktopとDocker Desktop Backendの2つですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307348/7d8071f4-a6ce-40e6-bb1e-5bc66f3636ec.png)

終了後に一度Powershellから`wsl --shutdown`でWSLも終了させて、再度Docker Desktopを起動しました。

今まではこれでもうまくいってましたが、今回はダメでした。

### Docker Desktopのログを見てみる

`C:\Users\<user-name>\AppData\Local\Docker\log`にログがあるみたいなので見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307348/f7a24b46-29e8-4e4a-9834-7dfe916b8944.png)

log以下にはhostとvmがありますね。

host以下に何種類かログがあり、こっちに色々書いてあるみたいですね。

- com.docker.backend.exe.log
- com.docker.diagnose.exe.log
- com.docker.build.exe.stderr.log
- com.docker.build.exe.stdout.log
- com.docker.dev-envs.exe.stderr.log
- com.docker.dev-envs.exe.stdout.log
- Docker Desktop.exe.stderr.log
- Docker Desktop.exe.stdout.log
- electron-2025-06-08-15.log
- monitor.log
- httpproxy.log

Chat GPTに聞いてみたら、それぞれ以下の役割があるようです。

| ログファイル名                                  | 説明                                                                                                  |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------- |
| **`com.docker.backend.exe.log`**         | Docker Desktop のバックエンド機能（WSL2連携、Kubernetes、ファイル共有など）を管理するコアプロセスのログ。Docker Engine の起動や停止時のトラブル調査で重要。 |
| **`com.docker.diagnose.exe.log`**        | 「Troubleshoot」画面の「Run Diagnostics」機能で実行される診断ツールのログ。システム情報の収集や問題検出の過程が記録される。                         |
| **`com.docker.build.exe.stderr.log`**    | `docker build` に関わる内部ビルドコンポーネントの標準エラー出力ログ。ビルド失敗や構文エラーの原因を特定する際に有用。                                  |
| **`com.docker.build.exe.stdout.log`**    | 上記の標準出力ログ。ビルドプロセスの進行状況や正常な処理情報が出力される。                                                               |
| **`com.docker.dev-envs.exe.stderr.log`** | Dev Environments 機能（コードエディタと連携した開発環境構築）の標準エラー出力ログ。Dev Env の初期化・接続に失敗した場合の調査に使用。                     |
| **`com.docker.dev-envs.exe.stdout.log`** | Dev Environments の標準出力ログ。正常な起動ログや内部状態が確認できる。                                                        |
| **`Docker Desktop.exe.stderr.log`**      | Docker Desktop GUI（Electronアプリ）の標準エラー出力ログ。UIの表示エラー、IPC通信エラー、レンダリング問題などが記録される。                       |
| **`Docker Desktop.exe.stdout.log`**      | GUI の標準出力ログ。ユーザー操作やUIの状態遷移などの情報が記録され、GUIの正常動作を確認できる。                                                |
| **`electron-2025-06-08-15.log`**         | Electron フレームワークのクラッシュログ。Electron UI の例外や致命的エラー（クラッシュ、未処理の Promise、プロセス停止など）が詳細に記録される。              |
| **`monitor.log`**                        | Docker Desktop の監視プロセスによるログ。各プロセスやサービスが正常に起動しているかどうか、定期的な監視・ハートビート情報が含まれる。                          |
| **`httpproxy.log`**                      | Docker Desktop の HTTP/HTTPS プロキシ設定や通信ログ。社内プロキシや環境変数 `HTTP_PROXY` による影響がある場合の接続状況を記録する。              |

上記のログからエラーっぽい箇所を抜き出してみます！

**com.docker.backend.exe.log**

```text
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.gvisor] gvisor: context context canceled so closing ethernet connection
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.engines] waiting for linux/wsl VM to start
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.apiproxy][W] error reading response from Docker: unexpected EOF
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.engines] running engine linux/wsl
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.logwrite][W] unable to download logs from VM. Will retry in 100ms. Error was: EOF
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.engines] stopping engine
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.events] adding server timestamp to event (engines): 1749362465954758900 docker: stopping
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.statehandler] sending to Dashboard: stopping
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.state] backend state changed to stopping
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.kubernetes] broadcasting Kubernetes event: 2025-06-08T14:22:54.892783900+09:00 (b2fd7375) kubernetes disabled: Kubernetes is stopped
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.ipcstream] 2e36c653-BackendAPI /engine/state --> 2025-06-08T15:01:05.954758900+09:00 (5d3f6edc) engine stopping:
[2025-06-08T06:01:05.954758900Z][com.docker.backend.exe.state] sending desktop state:EngineStoppingState
```

```text
[2025-06-08T06:01:09.012493500Z][com.docker.backend.exe.tracker] queuing DesktopState
[2025-06-08T06:01:09.013037200Z][com.docker.backend.exe.tracker] sending event: desktopState
[2025-06-08T06:01:09.013037200Z][com.docker.backend.exe] backend crashed, dumping error to file and reporting to user: running engines: engines watcher: running engine: waiting for the Docker API: context deadline exceeded
[2025-06-08T06:01:09.013567700Z][com.docker.backend.exe.report] reporting error to user: running engines: engines watcher: running engine: waiting for the Docker API: context deadline exceeded
[2025-06-08T06:01:09.014632700Z][com.docker.backend.exe.report] error server listening on \\.\pipe\errorReporter
[2025-06-08T06:01:09.014632700Z][com.docker.backend.exe.ipc] run 2617483b-ErrorReportAPI for component report on \\.\pipe\errorReporter
[2025-06-08T06:01:09.016243700Z][com.docker.backend.exe.tasks] all 1 tasks shutdown
[2025-06-08T06:01:09.016243700Z][com.docker.backend.exe.services] dev envs stopped: context done
[2025-06-08T06:01:09.017305000Z][com.docker.backend.exe.tasks] all 1 tasks shutdown
[2025-06-08T06:01:09.017305000Z][com.docker.backend.exe.tasks] detected errors written to process stdout/stderr for C:\Program Files\Docker\Docker\resources\com.docker.build.exe
```

この2つのエラーログをChat GPTに聞いてみたところ、以下の回答が得られました。（一部抜粋）

```
この一連のログは：
Docker Desktop が WSL2 上の仮想環境を立ち上げようとして失敗 → Docker Engine が異常終了 → 自動的に停止処理が走った
という一連のクラッシュプロセスを表しています。
（中略）
このエラーは、Docker エンジンが一定時間内に応答を返さず、タイムアウトしたことを意味します（＝context deadline exceeded）。
Docker Desktop はバックグラウンドでエンジン（WSL2 または Hyper-V）を立ち上げてから、Docker API に接続して制御しますが、その接続待ちに 失敗してクラッシュ しています。

✅ 今やるべき対応（重要順）
[1] WSL2 の完全シャットダウン
    コマンド: wsl --shutdown
    説明   : すべての WSL 仮想環境を停止し、Docker の再起動準備をします。

[2] Docker Desktop の再起動
    手順   : アプリケーションを一度終了し、再度起動します。
    説明   : バックエンドエンジンが再構築される可能性があります。

[3] WSL 環境の確認
    コマンド: wsl --list --verbose
    説明   : docker-desktop / docker-desktop-data が存在し、Version=2 になっているか確認。

[4] Docker の仮想環境をリセット（最終手段）
    コマンド:
        wsl --unregister docker-desktop
        wsl --unregister docker-desktop-data
    説明   : Docker Desktop の WSL 環境を削除し、次回起動時に再構築させる。
             ※ すべてのコンテナ・ボリューム・イメージが消えるので注意！

```

たまたま最初に見たログに書いてあることから原因を特定できるかも

## ログを踏まえて

シャットダウンと再起動は一度実施したので、WSL環境の確認からしていきます。

`wsl --list --verbose`をPowershellで実行してみると、現時点ではdocker-desktop / docker-desktop-data が存在していませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307348/7bd3d0b4-4703-4765-88af-86ca6a833066.png)


:::note info
厳密には最初は「docker-desktop」は存在していましたが、いろいろいじってたら両方表示されなくなってしまいました。。。
:::

Chat GPTに「wsl --list --verboseをPowershellで実行してみると、現時点ではdocker-desktop / docker-desktop-data が存在していませんでした。どうすればいいですか？」と聞いてみたところ、以下のように回答してもらいました。

```
✅ 優先して行うべき対応手順（安全順）

[1] Windows を再起動
    - 一時的な WSL 状態不良や Docker のスタック状態が原因のことが多いため、最初に実行。

[2] WSL のバージョン確認・再インストール
    コマンド:
        wsl --version
    → 古い場合は `wsl --update` で WSL を最新版に。
    → 必要に応じて、`Windowsの機能の有効化` から「仮想マシンプラットフォーム」「WSL2」の両方にチェックがあるか確認。

[3] Docker Desktop の「Reset」機能を使用
    手順:
    1. Docker Desktop を開く（起動できるなら）
    2. [Settings] → [Troubleshoot] → `Reset to factory defaults`
    注意:
    - すべての設定・イメージ・ボリュームが消えます。
    - `docker-desktop` と `docker-desktop-data` を再構築してくれます。

[4] Docker Desktop をクリーン再インストール（最終手段）
    手順:
    1. Docker Desktop をアンインストール
    2. 以下のディレクトリを削除（残っていれば）：
        - `C:\Users\<あなたのユーザー名>\AppData\Roaming\Docker`
        - `C:\Users\<あなたのユーザー名>\AppData\Local\Docker`
        - `C:\Users\<あなたのユーザー名>\.docker`
    3. WSL 環境の残骸も削除：
        - `wsl --unregister docker-desktop`
        - `wsl --unregister docker-desktop-data`
    4. 最新版の Docker Desktop を[公式サイト](https://www.docker.com/products/docker-desktop/)から再インストール

```

安全順位並べてくれるのめっちゃありがたい！！

[1] Windows を再起動
はすでに実施してみましたが効果がなく、
[2] WSL のバージョン確認・再インストール
だとWSLにおいてある開発データが全部吹き飛びそうなので、
[3] Docker Desktop の「Reset」機能を使用
をやってみることにします！

Docker Desktopを工場出荷状態に戻すだけなら、コンテナとイメージとボリュームが吹き飛ぶだけだし、実際の開発データ自体は問題ないはず。。。

### Docker Desktopを工場出荷状態にする

`Reset to factory defaults`を実行してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307348/a9b428d2-6e5d-4c9f-b094-28d253ef9075.png)

そして再起動してみると、、、Docker Desktopが無事に起動しました～～～

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307348/ab29d085-ef7c-4149-9cba-abb687b4edda.png)

WSL上でもdockerコマンドが使えるようになりました！VS CodeでDevcontainerも使えます！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307348/bafeca05-4b05-495e-947a-5cfa137bf8a0.png)

ただ、`wsl --list --verbose`をPowershellで実行してみても、結局docker-desktop-data は存在していませんでした。
そういうもんなのかな？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307348/7d959afa-71a1-4cb4-874a-bf88141bc2d4.png)


## おわりに

今日はDocker Desktop起動時のエラーを解決して終わってしまいました。。。
開発環境構築が実装の一番の敵かもしれない泣

そんでもって、ログを見ても結局最後はリセットでごり押しというエンジニアらしかぬ解決法でした。

悔しい。。。
もっとログを見て対応できるようになりたいですね。