デフォルトの、なに、ディストロ?を確認してバージョンが WSL 2 になってなかったらそれが原因ぽい。
先にまとめ
- WSL2 + Docker
docker run …
でエラー: “Cannot connect to the Docker daemon at unix:///var/run/docker.sock”- 対象の WSL2 のディストロをデフォルトに設定して再起動
- 同様のエラーは様々な原因がありそうなので、これで解決しないかも
状況
Windows 10 はこう。
1 2 3 4 5 6 | >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 は普通に動く。
1 2 3 4 5 | >docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. … |
使いたい WSL2 ディストロ (Ubuntu-20.04) はこう。
1 2 3 4 5 | $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION= "Ubuntu 20.04 LTS" |
1 2 | $ docker --version Docker version 19.03.11, build 42e35e61f3 |
で、docker run
でエラーになる。
1 2 3 | $ 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 側のターミナルでこれだけ。
1 | >wsl -- set -default Ubuntu-20.04 |
デフォルト “*” で選択されているものの VERSION が 2 になってることを確認。
1 2 3 4 5 6 | >wsl --list --verbose NAME STATE VERSION * Ubuntu-20.04 Running 2 Ubuntu Running 1 docker-desktop Running 2 docker-desktop-data Running 2 |
WSL インスタンスをいったん終了。(これいらないかも?)
1 | >wsl --terminate Ubuntu-20.04 |
ここで Docker を再起動する。Windows タスクバーのアイコンを右クリックして “Restart” を選択。しばらく待つ。
Docker が起動したら、WSL2 へログインして docker run
をまた実行。
1 2 3 4 5 | $ 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 の組み合わせはだめなのかな。未確認。そんなことするひといなさそうだけど。