VSCode Dev ContainerとRancher Desktopで作るコンテナ環境【WSL】

今回はRancher Desktopを導入して、WSL上のUbuntuやVSCode Dev Containerで動かすコンテナ環境の作り方をご紹介します。
といっても、導入すること自体は簡単で、主にトラブルシューティングと、WSL2のUbuntuから利用する際の注意点を書いていこうと思います。

目的

筆者は普段からクライアントとして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と遜色ないレベルで利用できますので、
皆さんもこの機会に利用してみてはいかがでしょうか。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です