DockerDesktop for Windowsが起動しない、そんなあたなへ【2022年8月】

# 概要
　自分自身、Dockerの知識・経験が非常に浅かったことも要因かとは思うのですが…「DockerDesktop for Windows」を使用し開発しようとしたものの、
- DockerDesktopアプリが起動しない（＆再度使おうとしたものの、また使えなくなった）
- コマンド`docker build`や`docker compose up -d`でエラーが出て進まない

などなど…悩み、時間を費やし、苦しみを味わいまくりました。同じ悩みを抱える方がいらっしゃるのであれば、その苦しみが少しでも減りますようこのメモを残します:sheep::sheep:

:warning: **注意** :warning:
- こちらは社内に**2022年8月頃に作成**・公開したメモのため、情報が古くなっている可能性があります。が、「ひょっとしたら誰かの役に立つ情報があるかもしれない！」という思いで載せることにしました。
- これらの方法以外にも、それぞれの原因に合った良い解決方法は存在すると思います。適宜ググってください！
- 現在はDockerDesktop for Windowsを使用していないこともあり、私から質問にはお答えすることは難しいです…すみません。

## （超ザックリと）環境・状況に関する情報
- Windows10
- 「Hiper-V」有効化済
- DockerDesktopのwindows版のダウンロードは完了
    - 「Use WSL2 ...」はチェックを外してインストール（Hyper-Vを利用するため）
    - コマンド「docker version」実行での確認完了

# STEP1：そもそものDockerアプリが起動しない

## エラー「Not enough memory to start Docker」発生
https://qiita.com/senaha/items/44cdf2d3dbda0c52456e

上記を参考に、必要メモリ数を減らした。

## エラー「Docker Desktop service is not running, would you like to start it? Windows will ask you for elevated access.」

https://qiita.com/Mocel/items/3fc3a212cb8d2a802879

上記を参考に、制御フローガード（CFG）を見直した。アップデート関係無く、効くときは効く。

## DockerDesktopを起動し画面が表示されるものの…①「Docker desktop stopped...」が表示されたまま

https://qiita.com/kat_log/items/030847cf45728b5f414e

上記を参考に、管理者で起動したpowershellにてコマンド実行。
上記でNGだった場合は下記を参考にsettings.jsonを編集しても良いかも。

https://remix-yh.net/2139

## DockerDesktopを起動し画面が表示されるものの…②読み込みのグルグルのまま…
上記項目『 DockerDesktopを起動するも…①「Docker desktop stopped...」』と同様の対応でOK。

## DockerDesktopアイコンをクリックして起動させても無反応、または上記以外のエラー
1回目の起動では無理だったが、2回目以降は無事に起動したことがあった。（なんで・・・？？）
何度か試すのも手かもしれない。

# STEP2：Dockerアプリは起動したが「docker build」「docker compose up -d」でエラー

## エラー「[internal] load metadata for docker.io/library/hoge」①設定の見直し
例えば、下記のようなエラー。
```
------
 > [internal] load metadata for docker.io/library/python:3.10
------
failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to authorize: rpc error: code = Unknown desc = failed to fetch oauth token: Post "https://auth.docker.io/token": proxyconnect tcp: tls: first record does not look like a TLS handshake
```
ファイル「DockerFile」内で「FROM」を用いて呼び出しているライブラリ（上記だとpython:3.10）に対して
プロキシが関係していそうなエラー。

https://zenn.dev/hiszuk/articles/cb30071df19a1b4f8365

上記を参考に、DockerDesktopアプリのDocker Engine 設定画面にて設定を変更。

## エラー「[internal] load metadata for docker.io/library/hoge」②pullしてまえ
上記でも解決しなかった場合…下記のように、
docker build（またはdocker compose）する前にpullしておくとエラーが出なくなることがある。
（pullが成功するとdockerのimageが（この場合は「python3.10」等の名前で）作成されているかも。要確認）
```
docker pull python:3.10
```

## エラー「invalid volume specification」①不要なimageの削除
```
time="2022-06-28T14:02:23+09:00" level=warning msg="network default: network.external.name is deprecated in favor of network.name"
[+] Running 0/1
- Container trial-back  Creating                                                                                                                               0.2s
Error response from daemon: invalid volume specification: 'C:\work\hoge\backend\app:/app:rw'
```
「無料でDockerを使っている場合はvolumeに制限がある」と推測。使用容量を減らす方法として、まず
コマンド「docker images」実行し不要なimageを見つけ、「docker image rm <IMAGE ID>」で削除

## エラー「invalid volume specification」②軽いライブラリを使用する
ライブラリによっては不可能な対処法だが、
例えばpython3.10の場合、python3.10の代わりに「python:3.10-slim」を使用するよう変更しても良いかも。
（DockerFileの変更等が必要）

## エラー「The requested image's platform (linux/amd64) does not match ...」
```
---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (windows/amd64) and no specific platform was requested
```
「Linux container を作れません。なぜって、Windows containerモードやし」とのこと。

2024年11月現在、リンクが無効になってしまっていましたが[Dockerでエラー(The virtual machine or container with the specified identifier is not running](http://kanako.s500.xrea.com/nukblog/show.rhtml?id=724)を参考に「Docker - Switch to Linux container」を実施し解決させていたようです。
またこのとき、DockerDesktopが自動で再起動（Restart）されるはずなので注意！

## エラー：pip installできない※ローカル環境
```
Step X/Y : RUN pip install hogehoge
---> Running in 3c6edf9b380d
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f8de19f1e10>: Failed to establish a new connection: [Errno -5] No address associated with hostname')': /hoge/hogehoge/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f8de19f3250>: Failed to establish a new connection: [Errno -5] No address associated with hostname')': /hoge/hogehoge/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f8de19f1360>: Failed to establish a new connection: [Errno -5] No address associated with hostname')': /hoge/hogehoge/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f8de19f0fd0>: Failed to establish a new connection: [Errno -5] No address associated with hostname')': /hoge/hogehoge/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f8de19f0310>: Failed to establish a new connection: [Errno -5] No address associated with hostname')': /hoge/hogehoge/
ERROR: Could not find a version that satisfies the requirement hogehoge (from versions: none)
ERROR: No matching distribution found for hogehoge
```
プロキシで引っ掛かっていてpip installできないヤツ。以下はローカル環境では有効な方法なのだが、
ファイル「DockerFile」にて「pip install hogehoge」する記述の前にプロキシ設定してあげると良いかも。
```
ENV https_proxy "http://<ユーザ名>:<パスワード>@proxy.example.com:XXXX"
ENV http_proxy "http://<ユーザ名>:<パスワード>@proxy.example.com:XXXX"
```

# おわり！
　余談＆自戒ですが、PCの動作に不安がある場合は、別の作業をする（dockerが不要になった）際は、起動しているdockerを全てstopさせ、imageが残っている状態でDockerDesktopアプリを閉じる（Quit Docker Desktop）方が良いと思います。（一度、リモートデスクトップ繋いでデスクトップでdocker起動中、別のコードが見たくなりVSCodeを別途立ち上げたらデスクトップPCが動かなくなった上にリモートデスクトップが落ち、しばらく繋がらなくなりました…:sob:）

　皆さまの環境で、無事にDockerDesktop for Windowsが起動しますように！