以下の内容はhttps://let.blog.jp/tag/WSL2より取得しました。


WSL の Ubuntu 22.04 で Docker が起動しない
Ubuntu 20.04 の環境を 22.04 にアップグレードすると Docker が起動しなくなりました
この環境では docker.io を入れて service コマンドで起動していました

今年に入ってから WSL を入れた環境だと Ubuntu 20.04 ですが docker サービスが見つからないエラーになっていて docker.io をやめて消して リポジトリを追加してから docker-ce を入れていました
🔗 WSL2 で Docker サービスが見つからない

この環境でも docker-ce にしないといけないのかと docker-ce に置き換えましたが変わりません

sudo service docker start

では OK と表示されるのに docker に接続できず

sudo service docker status

を見ると起動していないと言われます

この現象ってちょっと前に debian の WSL であった記憶が……
🔗 WSL2 の debian で docker サービスが起動しない

このときと同じように iptables をレガシーモードにすることで起動できるようになりました

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
WSL2 のファイルを Windows で開くと読み取り専用になる
WSL2 のファイルを Windows から扱う場合

\\wsl$\Ubuntu\tmp

のようなアドレスをエクスプローラで開けばいいです
これだと Ubuntu ディストリビューションの /tmp フォルダを開けます
後は Windows 上のファイルを扱うようにエディタで開いたりエクスプローラの操作でフォルダ移動したりできます

普段はこれで問題なかったのですが なぜかファイルが読み取り専用になって編集できませんでした
編集できるファイルをもあってその違いを調べると Linux 側のファイルの所有者情報が原因のようでした

Windows からのアクセスは WSL インスタンスの初回起動時に作るユーザの権限になっているようです
root で作られたファイルは Windows から変更できません
root 権限だと /etc とか /usr とかそういうところになってくるので 誤ってエクスプローラでドラッグアンドドロップして移動してしまったりで Linux 側が動作しなくなることを避けるためでしょうか

touch a
sudo touch b



-rw-r--r--  1 user user    0 Mar  5 23:40 a
-rw-r--r-- 1 root root 0 Mar 5 23:40 b

となっていると Windows で
    a は書き込みできる
    b は読み取り専用
となります

sudo chown user:user b

で b の所有者とグループを a と同じにすると b も書き込みできるようになります

普段は Windows 側で書き込むところを root 権限にしないので問題はなかったのですが Docker を使ってコンテナ内で作業している部分でファイルの編集は Windows でやるとしたときに困りました
コンテナ内では root 権限なので 作るフォルダやファイルがすべて Windows では読み取り専用になってしまいます
コンテナにマウントしたときはホストの user というユーザは認識されてないみたいで ユーザ id の 1000 になってました
「sudo chown 1000:1000 file」 で書き込みできるようになりましたが 毎回は面倒です

WSL2 のローカルに実体を置いて Docker コンテナと Windows から参照するというのがあまり良くないのかもしれません
WSL2 と Docker コンテナからの読み書きが多少遅くなってもいいなら Windows 側に実体をおいたほうがこういう権限問題は起きずに済んで良いのかもしれません
WSL2 が起動できないときの対処方法
WSL2 を起動しようとすると

Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。

というエラーが表示されるとき

参考の URL などのチュートリアルに従って Windows の機能の有効化や dism.exe を使って WSL や仮想マシンプラットフォームを有効に設定済み
◯ タスクマネージャのパフォーマンスタブの CPU のパネルでは 「仮想化: 有効」 になってる
◯ WSL1 は動いてる

なのに WSL2 が起動できない という状況なら bcdedit コマンドが必要かも
管理者権限で

bcdedit

を実行して出てくるリストに

hypervisorlaunchtype    Off

があると 実行必要
↓のコマンドを実行して Off から Auto にしないといけない

bcdedit /set hypervisorlaunchtype auto



以上の内容はhttps://let.blog.jp/tag/WSL2より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14