起動できるようになるまでにやったこと
- Roamingフォルダーの削除
- 「WSL 2」再インストール
- 仮想マシンプラットフォーム機能を有効にする
2と3は最初にDockerをインストールしたときに実行していたことで、今これが原因でDockerが起動しない理由はよくわかりません。なんらかの理由で設定が変更されてしまったと考えるのがよさそうです。
以下、補足です。
1. Roamingフォルダーの削除
今回のエラーを対処するためには、「「C:\Users\[ユーザー]\AppData\Roaming\Docker」を削除して、DockerDesktopを再起動することです。
“Docker failed to initialize”というエラーが出た場合の対処方法
Roamingフォルダとは、PC内のアプリやプログラムの設定などを、ユーザーごとに保存しているフォルダです。このフォルダーによって今回のエラーが発生していました。
今回の件と参考記事とは問題が異なりますが、起動時のエラーを解消するために削除してみました。Roamingフォルダーを削除する必要があったかはわかりませんが、結果的に起動時にエラーを出力するようになり、問題解決に繋がりました(エラーを出力しないまま起動に失敗していた)。ログファイルなどで起動時のエラーを確認出来るならRoamingフォルダーを削除する必要はないかも知れません。
出力されたエラーは「WSL 2 is not installed」。WSL 2はDockerインストール時にインストールしているはずなので無いはずはないんですが、仕方がないのでインストールを試します。
2. 「WSL 2」再インストール
管理者権限で実行したPowerShell上で以下のコマンドを実行します。WSL をセットアップするコマンド dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart を実行します。
WSL 2 対応 Docker Desktop for Windowsを使うための手順 – Qiita
少し待って問題なくインストール完了。この状態でコマンド「wsl –set-default-version 2」を実行するとパスは通っているものの次のエラーが出ました。
Windows の仮想マシンプラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。
3. 仮想マシンプラットフォーム機能を有効にする
さすがにBIOSの設定が巻き戻ることは考えにくいので、なんらかの理由で「仮想マシンプラットフォーム機能」が無効になってしまっていることを疑いました。Windows Subsystem for Linux (WSL) でディストリビューションの WSL バージョンを 2 で動作させるためなどに必要な Windows の機能を有効化または無効化する方法です。
仮想マシン プラットフォームの有効化と無効化 | SEECK.JP サポート
確認したところ、見事に無効になっていたのでチェックを入れて有効にしました。Windowsを再起動。
再起動後、今まで通りDockerが起動しました。Roamingフォルダーを削除したせいか「Service Agreement」の表示が出るのでAgree、同様にチュートリアルが始まるのでスキップ。これでコンテナを見るといつも通りDockerが起動していました。アプリ設定やデータも特に問題なさそうです。良かった。
まとめ
Windowsは概ね気に入ってるんですけど、こういうのがたまにあるから困りますよね。割と頻繁にある。もちろんLinuxだってカーネルを更新して何か起きるってことはあるのかも知れませんけど、勝手にやるってことはないような。Macもメジャーアップデート以外はあんまり問題起きた記憶がないし。だいたいいつも直るから別に良いんですけどね。Windowsってそういうもんだと思いますしね。