概要
自分自身、Dockerの知識・経験が非常に浅かったことも要因かとは思うのですが…「DockerDesktop for Windows」を使用し開発しようとしたものの、
- DockerDesktopアプリが起動しない(&再度使おうとしたものの、また使えなくなった)
- コマンド
docker build
やdocker compose up -d
でエラーが出て進まない
などなど…悩み、時間を費やし、苦しみを味わいまくりました。同じ悩みを抱える方がいらっしゃるのであれば、その苦しみが少しでも減りますようこのメモを残します
注意
- こちらは社内に2022年8月頃に作成・公開したメモのため、情報が古くなっている可能性があります。が、「ひょっとしたら誰かの役に立つ情報があるかもしれない!」という思いで載せることにしました。
- これらの方法以外にも、それぞれの原因に合った良い解決方法は存在すると思います。適宜ググってください!
- 現在はDockerDesktop for Windowsを使用していないこともあり、私から質問にはお答えすることは難しいです…すみません。
(超ザックリと)環境・状況に関する情報
- Windows10
- 「Hiper-V」有効化済
- DockerDesktopのwindows版のダウンロードは完了
- 「Use WSL2 ...」はチェックを外してインストール(Hyper-Vを利用するため)
- コマンド「docker version」実行での確認完了
STEP1:そもそものDockerアプリが起動しない
エラー「Not enough memory to start Docker」発生
上記を参考に、必要メモリ数を減らした。
エラー「Docker Desktop service is not running, would you like to start it? Windows will ask you for elevated access.」
上記を参考に、制御フローガード(CFG)を見直した。アップデート関係無く、効くときは効く。
DockerDesktopを起動し画面が表示されるものの…①「Docker desktop stopped...」が表示されたまま
上記を参考に、管理者で起動したpowershellにてコマンド実行。
上記でNGだった場合は下記を参考にsettings.jsonを編集しても良いかも。
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)に対して
プロキシが関係していそうなエラー。
上記を参考に、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 」で削除
エラー「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を参考に「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が動かなくなった上にリモートデスクトップが落ち、しばらく繋がらなくなりました…)
皆さまの環境で、無事にDockerDesktop for Windowsが起動しますように!