Docker Desktop for WindowsならWSL IntegrationがあるのでWSL2でDockerが動くと聞いたのでやってみようとしたのですが、うんともすんとも言わないので、一旦WSL2のUbuntuをアンインストールして入れ直しました。
wsl2とdocker desktopの連携がうまくいかないんだけど、これは昔作ったwsl1のイメージを2に替えたからなんかなぁ?作り直したらうまくいくのか、それとも原因は他にあるのか…(ネットワークとか)
— パトラッシュ@エキスパート職 (@patorash) 2020年3月20日
WSL2のubuntuを入れ直してみる。趣味はOSの再インストールです(嘘)
— パトラッシュ@エキスパート職 (@patorash) 2020年3月20日
WSL2を入れなおしたらうまくいったっぽい。ということは色々やり直しだな。まぁいいや。今日はこのくらいで。
— パトラッシュ@エキスパート職 (@patorash) 2020年3月20日
ということで、入れ直したら動いたので、まぁなんか調子悪かったんやなと思ってたのですが、後日WSL2上のUbuntuからdocker-composeを実行したらまた動かない…。
Wsl2からdocker desktopが使えない。昨日使えてたじゃん!
— パトラッシュ@エキスパート職 (@patorash) 2020年3月25日
powershellだとdocker-compose動くなぁ。しかしWSL Integrationを有効にしているのに…。
— パトラッシュ@エキスパート職 (@patorash) 2020年3月25日
全く原因が分からないので色々ググってはDockerを再起動したり、WSL Integrationを無効・有効を繰り返したりとかしてみたんですが、全くダメ。
そして、GitHubのIssueを見てみたら全く同じような症状の人たちが結構いるみたいだったので、ずーっと読んでいってたら、解決策がありました!
WSL Integrationを有効にすると、docker-desktop-proxyが上手いこと繋げてくれてるらしい…。
上記のQiitaの記事を引用すると、
$ ps -ef | grep docker root 41 40 0 13:04 pts/0 00:00:00 /mnt/wsl/docker-desktop/docker-desktop-proxy --distro-name Ubuntu --docker-desktop-root /mnt/wsl/docker-desktop
Technical Preview版では WSL 2の Ubuntuで dockerデーモンが動作していましたが、backend版では docker-desktop-proxyという Docker機能のプロキシーのようなプロセスが確認できます。 また Windows Hyper-Vマネージャーの表示では、Docker DesktopVMは動作していない状態ですが、WSL 2の Ubuntuと Windowsコマンドプロンプトからの両方から Docker機能を利用できそうです。
とのことなのだが、私の環境でやってみると、どうなるか…。
$ ps -ef | grep docker patorash 14873 10929 0 03:02 pts/2 00:00:00 grep --color=auto docker
そんなプロセスはいない!ということで、GitHubのissueを参考に、このdocker-desktop-proxyを直接動かしてみます。
$ sudo /mnt/wsl/docker-desktop/docker-desktop-proxy --distro-name Ubuntu --docker-desktop-root /mnt/wsl/docker-desktop
パスワードを聞かれるので、打ちます。その後はうんともすんとも言わないけれど、プロセスが動いてます。
そこで、別タブでターミナルを開いて、docker-compose ps
と打ってみたところ、結果が表示されました!
そして、docker-desktop-proxyを実行しているタブではログがどんどん流れていきました。
$ sudo /mnt/wsl/docker-desktop/docker-desktop-proxy --distro-name Ubuntu --docker-desktop-root /mnt/wsl/docker-desktop [sudo] password for patorash: INFO[0010] proxy >> GET /v1.30/containers/json?all=1&limit=-1&filters=%7B%22label%22%3A+%5B%22com.docker.compose.project%3Dsampleproject%22%2C+%22com.docker.compose.on eoff%3DFalse%22%5D%7D&trunc_cmd=0&size=0 INFO[0010] proxy << GET /v1.30/containers/json?all=1&limit=-1&filters=%7B%22label%22%3A+%5B%22com.docker.compose.project%3Dsampleproject%22%2C+%22com.docker.compose.on eoff%3DFalse%22%5D%7D&trunc_cmd=0&size=0 (3.5251ms) INFO[0010] proxy >> GET /v1.30/containers/ec0324ce627586321377c9b651240975e448314423a29fed2213f30124d0c19e/json
動いてるっぽい。大丈夫そうなので、docker-compose up -d
を実行したら、ちゃんとWSL2上のUbuntuでdockerのコンテナが立ち上がりました👍