今回はRancher Desktopを導入して、WSL上のUbuntuやVSCode Dev Containerで動かすコンテナ環境の作り方をご紹介します。
といっても、導入すること自体は簡単で、主にトラブルシューティングと、WSL2のUbuntuから利用する際の注意点を書いていこうと思います。
目次
- 1 目的
- 2 環境
- 3 Rancher Desktopの導入
- 4 トラブルシューティング(今回のメイン)
- 4.1 dockerコマンド実行時のエラー
- 4.1.1 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 4.1.2 Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version”: dial unix /var/run/docker.sock: connect: permission denied
- 4.2 VSCode Dev Container実行時のエラー
- 4.3 WSLのUbuntuにSSH接続するとdockerコマンドが使えない
- 4.4 Rancher Desktopのアンインストール方法
- 4.1 dockerコマンド実行時のエラー
- 5 終わりに
目的
筆者は普段からクライアントとしてWindowsを使っていますが、昨今ちょっとした検証のためにホストOSを汚すのも嫌であり、またVM上にLinux入れるのも面倒です。
そこで登場するのがコンテナになりますが、Docker Desktopはライセンス変更などでやや使いにくくなってきているので、
今回ご紹介するRancher Desktopに目を付けました。
単純にWindows上(WSL)で使う分にはあまり困らないのですが、VSCode Dev Containerからの利用や、
WSLのUbuntuから使うにはちょっとした工夫が必要だったので、今回その辺をメインにご紹介します。
環境
筆者の環境は以下の通りです。
OS/SW | バージョン | 特記事項 |
---|---|---|
ホストOS(作業環境) | Windows 10 | |
WSL2 | 1.2.0.0 | |
Rancher Desktop | 1.8.1 | |
Docker Client | 23.0.1-rd | Rancher Desktopに付随する |
Docker Server | 20.10.21 | Rancher Desktopに付随する |
VSCode | 1.77.3 | |
WSL2のLinuxディストリビューション | 20.04 LTS |
Rancher Desktopの導入
既にWSL2とVSCode、Dev Containerは導入されているものとします。
Rancher Desktopの導入といっても簡単で、Rancher Desktopの公式サイトからインストーラーを落としてきて、
あとはウィザードに従うだけです。
Rancher Desktopインストーラーの実行
インストーラーをダブルクリックして、ウィザードに従って進めていきます。
PCの再起動
ウィザードの最後にFinishを押下すると再起動を促されますので、再起動してください。
※そのため「Run Rancher Desktop」にチェックを入れる必要はないです。
Rancher Desktopの起動
初回の起動を行うと、コンテナエンジンの選択を行う必要がありますので、dockerコマンドの実行や、VSCode Dev Containerで利用するためには「dokcerd(moby)」を選択してください。
またKubernetesを有効化することも出来ますが、PCのリソースを消費するので、すぐ使う予定がない方はチェックは入れない方が良いでしょう。(後ほど有効化することもできます。)
これで導入は完了です。
トラブルシューティング(今回のメイン)
ここからは今回のメインである、トラブルシューティングについて書いていきます。
dockerコマンド実行時のエラー
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Ubuntu側でdocker versionなどdockerコマンドを実行したときにこのエラーがでる場合があります。
これはRancher DesktopのWSLでUbuntuを選択していないことが原因になりますので、選択することで解消します。
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version”: dial unix /var/run/docker.sock: connect: permission denied
Ubuntu側でdocker versionなどdockerコマンドを実行したときにこのエラーがでる場合があります。
こちらは筆者環境ではRancher Desktop 1.8.1になってからは発生していませんが、1.7.0では発生を確認していました。
もし発生した場合は、Ubuntu側にdockerグループを作成、ユーザーに付与することで解消します。
develop@1010-00138:~$ cat /etc/group | grep docker
develop@1010-00138:~$ # dockerグループ追加
develop@1010-00138:~$ sudo groupadd docker
develop@1010-00138:~$ # ログインユーザーにグループ付与
develop@1010-00138:~$ sudo gpasswd -a develop docker
Adding user develop to group docker
develop@1010-00138:~$
~Rancher再起動~
develop@1010-00138:~$ # 付与されていることの確認
develop@1010-00138:~$ id
uid=1000(develop) gid=1000(develop) groups=1000(develop),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(docker)
develop@1010-00138:~$
VSCode Dev Container実行時のエラー
Error response from daemon: create \wsl.localhost\Ubuntu-20.04\mnt\wslg\runtime-dir\wayland-0: “\\wsl.localhost\Ubuntu-20.04\mnt\wslg\runtime-dir\wayland-0” includes invalid characters for a local volume name, only “[a-zA-Z0-9][a-zA-Z0-9_.-]” are allowed. If you intended to pass a host directory, use absolute path
VSCode Dev Containerを実行すると、コンテナ作成までは成功するが、その後このエラーが出る場合があります。
こちらはWSL(Ubuntu)でWAYLAND_DISPLAYが設定されていると、自動的にWaylandソケットをマウントするようで、それが失敗しているようです。
これはVSCodeの設定で”dev.containers.mountWaylandSocket”: false、つまりマウントしない設定にすることで解消します。
【参考リンク】
cant use “Dev Container: Open folder in Containers” due to unsupported UNC path, when i use podman #8157 dev.containers.mountWaylandSocketオプションについて
cant use “Dev Container: Open folder in Containers” due to unsupported UNC path, when i use podman #8157 dev.containers.WAYLAND_DISPLAYの挙動について
WSLのUbuntuにSSH接続するとdockerコマンドが使えない
事象・原因
WSLのUbuntuにSSH接続する方法はこちらをご覧ください。
WSL2のUbuntuにSSHで接続する方法【systemd対応版】
さて、Windows TerminalなどでWSLのUbuntuにで操作する分にはdockerコマンドが使えるのですが、UbuntuにSSH接続した場合はdockerコマンドは使えません。
これは下記の通りPATHの設定に起因します。
Windows TerminalなどでUbuntuに接続すると、デフォルトでWindowsの環境変数をPATHに引き継いでくれます。
そして(筆者環境の)dockerコマンドのパスは「/mnt/c/Program Files/Rancher Desktop/resources/resources/linux/bin/docker」にあります。
では、SSH接続した場合どうなるかというと、Windowsの環境変数は引き継がれないため、dockerコマンドが見つかりません。
解決策
解決策はいくつかあるのですが、一番手っ取り早いものとしては、「/mnt/c/Program Files/Rancher Desktop/resources/resources/linux/bin/docker」のシンボリックリンクを、PATHに含まれているディレクトリに作成することです。
ここでは「/usr/local/bin」配下に作成してみましょう。
sudo ln -s '/mnt/c/Program Files/Rancher Desktop/resources/resources/linux/bin/docker' /usr/local/bin/docker
このようにdockerコマンドがPATHに含まれるようになったので、SSH接続してもコマンドが使えるようになります。
Rancher Desktopのアンインストール方法
ここからは、環境を色々弄ってしまい、最初からやり直したい方向けの紹介になります。
基本的にはソフトウェアをアンインストールしてもらえれば良いですが、WSL上とAppDataに設定が残ります。
ここではその削除手順を紹介します。
Rancher Desktopのアンインストール
設定のアプリかコントロールパネルで、アンインストールを行ってください。
WSLの登録の解除
アンインストールしてもWSLの登録が解除されませんので、下記のコマンドで解除してください。
wslconfig /u rancher-desktop
wslconfig /u rancher-desktop-data
AppDataのRancher Desktop関連ファイル削除
このまま再インストールしても前の設定が残っているため、下記ディレクトリを削除してください。
%UserProfile%\AppData\Local\rancher-desktop
%UserProfile%\AppData\Roaming\rancher-desktop
終わりに
Rancher Desktop(というより、Docker以外の代替ソフトウェア)とWSL、また、VSCode Dev Container周りは、何かとトラブルが多いですが、
1つ1つ解決していけばDocker Desktopと遜色ないレベルで利用できますので、
皆さんもこの機会に利用してみてはいかがでしょうか。