デフォルトの、なに、ディストロ?を確認してバージョンが WSL 2 になってなかったらそれが原因ぽい。

先にまとめ

  • WSL2 + Docker
  • docker run … でエラー: “Cannot connect to the Docker daemon at unix:///var/run/docker.sock”
  • 対象の WSL2 のディストロをデフォルトに設定して再起動
  • 同様のエラーは様々な原因がありそうなので、これで解決しないかも

状況

Windows 10 はこう。

>wsl --list --verbose
  NAME                   STATE           VERSION
* Ubuntu                 Running         1
  docker-desktop         Running         2
  Ubuntu-20.04           Running         2
  docker-desktop-data    Running         2

(ここで VERSION が 2 になってないのが駄目だったぽい。)

Windows 側からなら Docker は普通に動く。

>docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.
…

使いたい WSL2 ディストロ (Ubuntu-20.04) はこう。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04 LTS"
$ docker --version
Docker version 19.03.11, build 42e35e61f3

で、docker run でエラーになる。

$ docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

--set-default デフォルト設定して解決

目的のディストロをデフォルトに設定する。

Win10 側のターミナルでこれだけ。

>wsl --set-default Ubuntu-20.04

デフォルト “*” で選択されているものの VERSION が 2 になってることを確認。

>wsl --list --verbose
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  Ubuntu                 Running         1
  docker-desktop         Running         2
  docker-desktop-data    Running         2

WSL インスタンスをいったん終了。(これいらないかも?)

>wsl --terminate Ubuntu-20.04

ここで Docker を再起動する。Windows タスクバーのアイコンを右クリックして “Restart” を選択。しばらく待つ。

Docker が起動したら、WSL2 へログインして docker run をまた実行。

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.
…

やったー

おしまい

VM である WSL2 の中から VM 的な存在である Docker コンポーネントを起動できないのは当たり前だと思って諦めてたんだけど、実はそうでもなかった……。

たまたま docker --help 眺めててデフォルトってのがあるぞと気付けて良かった。

今回は WSL 1 から使っていた環境をそのまま残して別途 WSL 2 用にインスタンスを用意したんだけど、普通は変換して使うとか今なら最初から 2 だけ入れるとかになると思うので、引っかかるひとあんまりいないんじゃないかと思います。

WSL 1 を残す必要のない方は変換してください。こちらをどうぞ。

この↑記事にもあるように「デフォルトのバージョン」という設定もあるので混同しないようにご注意ください。

ところでデフォルト設定が必要ってことは、複数の WSL 2 ディストロと Docker の組み合わせはだめなのかな。未確認。そんなことするひといなさそうだけど。