デフォルトの、なに、ディストロ?を確認してバージョンが 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 の組み合わせはだめなのかな。未確認。そんなことするひといなさそうだけど。