WSL2でdockerを使う際のトラブルシュート
WSL2でdockerを使ったときに詰まりがちなトラブルの対処法についてメモしておきます。
なお以下の記事は、Docker Desktop for Windowsがインストールされていて起動している前提で、使用しているディストリビューションは「Ubuntu 20.04.5 LTS」です。
記載した対処法については自分の環境では上手くいったというものであって、安全性を保証できるものではないので自己責任で使用してください。
できれば、WSLイメージ(デストロ)のエクスポートを行いバックアップを作った上で試すのをお勧めします。
症状1:そもそもdcokerコマンドが入っていない
dockerコマンドを実行しようとすると以下のようなエラーメッセージがでる。
1 2 3 4 5 6 |
The command 'docker' could not be found in this WSL 2 distro. We recommend to activate the WSL integration in Docker Desktop settings. For details about using Docker Desktop with WSL 2, visit: https://docs.docker.com/go/wsl2/ |
さらに「このデストロにはdockerコマンドが見つから無いのでDocker Desktopの設定でWSLとの統合を有効にしろ」とエラーメッセージが出るが、統合することができない。
(設定画面のUse the WSL 2 based engineにチェックは入っているがコマンドを実行できない)
症状2:dockerコマンドは入っているがdockerサービスが起動していない
dockerコマンドを実行すると以下のようなエラーがでる。
1 |
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? |
さらに、dockerサービスを起動しようとすると下記のようなエラーが出てサービスを起動することができない
1 |
docker: unrecognized service |
症状3:docker runを実行するとパーミッションエラーが出る
dockerコマンドは存在し、dockerサービスも問題なく起動しているのに、コンテナを動かそうとするとパーミッションエラーがでてしまう。
1 |
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fva...": dial unix /var/run/docker.sock: connect: permission denied |
対策1:dockerを使うWSLのデストロを規定(デフォルト)に設定するDocker Desktop をWSLのデストロで使用するためには、デフォルトになっている必要があります。
wsl –list –verboseコマンドを使って、dockerを使いたいデストロがデフォルトになっているか確認しましょう。
例)
1 2 3 4 5 6 7 |
wsl --list --verbose NAME STATE VERSION * Ubuntu Running 2 dev Running 2 HackTheBox Stopped 2 docker-desktop-data Running 2 docker-desktop Running 2 |
アスタリスクが付いているのがデフォルト設定になっているデストロになります。デフォルト設定以外のデストロの中ではdockerを利用することができません。
例えば、devの中でdockerを使いたい場合は以下コマンドで変更します。
1 |
wsl --set-default dev |
対策2:docker-ceをインストールしてみる
上記の方法を試しても動かない場合に、docker-ceを直接デストロの中でインストールしてみます。この方法を行う場合は、WSLのエクスポートコマンドを使ってバックアップを取ってください。
1 |
curl https://get.docker.com | sh |
途中、「WSLならDocker Desktop を使った方がいいよー」といった警告がでますが、そのまま放置しインストールします。
インストールが終わったら、dockerコマンドがインストールされているか、dockerサービスが起動するかためします。
1 2 |
$ docker --help //コマンドが起動するか? $ sudo service docker start //サービスが起動するか? |
手動でdockerをインストールしても使用できるのは、規定(デフォルト)のデストロのみです。サービスを起動すると症状3が現れる場合は、対策1を行ってください。