この記事では基本的なWSL導入までの流れは汲みません。
進化中のWSL
WSL2
から連携可能になったDocker Desktop
これでwindows上でもlinuxサーバ開発ができるヤッター!
面倒臭いデュアルブートの設定しなくて済むし、Aviutl使いながらdockerビルドとかもできるワーイ!
Microsoft Build 2020イベントでGPUサポートの話まで出た!nvidia dockerまで使えるようになったら最高や!
しかしながら、お披露目からそんなに経って無いということもあり動作に直結する細かいバグがちらほら見られる。
個人的にメンドくさいと思ってるのがタイトルの事象。
初回起動時
WSL構築当初はそもそもマウント先を指定する必要があるのでgit hub issueに則った方法は必須となる。
cgroups: cannot find cgroup mount destination: unknown
上記エラーがでるので下記コマンドで対処
sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
これでdockerは難なく動くようになる。
OS再起動すると認識されなくなる
問題はここからでOS再起動時にdockerも立ち上がるように設定しておりdocker自体も問題なく起動しているようだが、
docker build
なりをWSL上で使おうとすると同じエラーが出て動かない。
sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
もう一度同じコマンドを打つと(当たり前だが)ディレクトリが存在しているエラーを吐き、
マウント解除してから同じコマンドぶつけても症状は変わらず。
調べてみると、どうもOS終了前の状態を記憶しているようで再起動時に同期が取れないことが原因のようである。
(リフレッシュ前にwindows側のdockerを操作するとWSL側のdockerの状態が一致していないことが確認できる)
対処法
同期取れててないなら再起動だ。もしくはWSLとdockerを連携したときの手順を思い返そう。
docker ->「setting」にある「resource」->「WSL Integration」をUbuntuを使おうとした場合、これをonにしたはずだ。
一旦offでリスタートしてからonに戻してリスタートするエラーが回避できた。
バージョン2.3.0.2の場合
五月頭にリリースされたバージョン2.3.0.2から画面が変わりました。
「Refresh」ボタンが追加されたようですが現状機能してないみたいです。今後のアップデートで実装されるのかな?
この場合「WSL Integration」の項目を全てオフにして「apply & restart」で適用させてから、もう一度項目すべてをonにして「apply & restart」すると
無事WSL上でdockerが使えるようになります。
自分の環境だと再起動するたびに必須なのですが、他の環境だとこの限りではないのかもしれません。
参考文献