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

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

今回は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
WSL21.2.0.0
Rancher Desktop1.8.1
Docker Client23.0.1-rdRancher Desktopに付随する
Docker Server20.10.21Rancher Desktopに付随する
VSCode1.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と遜色ないレベルで利用できますので、
皆さんもこの機会に利用してみてはいかがでしょうか。

アバター画像
About 久保雄平 5 Articles
2023年にjoin。主にバックエンドの開発、保守運用をしてきた男。趣味は美味しいお酒・ご飯を食べることと、ボードゲーム・マーダーミステリー・脱出ゲームばかりやっていますが、最近は古のゲームであるメイジナイトをやり始めて人生迷走中・・・
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる