WSLのディストリビューションのデフォルト設定が以下のようにdocker-desktopになっていると、
PS C:\Users\○○> wsl -l -v
NAME STATE VERSION
* docker-desktop Running 2
docker-desktop-data Running 2
Ubuntu Running 2
vscodeで右下のリモートウィンドウの選択で、「WSLへ接続」をおすと「vscode server for WSL closed unexpectedly.check WSL terminal for more details.」とポップアップエラーが出る。
vscodeウィンドウの右下には「starting VS code in WSL(docker-desktop)」というエラーもでる。
docker for windowsをインストールすると、docker独自のWSLのディストリビューションを作成して、WindowsとLinuxを連携するファイルシステムを実現できるよう仮想化がおこなわれるため、
wsl -l -v
でdecker-desktopがデフォルトになっていると、vscodeのリモートウィンドウ接続でWSLへの接続ができなくなる。
この現象を解決するには、
PS C:\Users\○○> wsl -s Ubuntu
この操作を正しく終了しました。
PS C:\Users\○○> wsl config
/bin/bash: line 1: config: command not found
PS C:\Users\○○> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
docker-desktop Running 2
docker-desktop-data Running 2
のようにディストリビューションのデフォルトをdockerが独自で利用しているWSLではなく、ユーザーがWSL上でさくせいしたものにきりかえるとかいしょうする。
しかし、docker desktop上での設定など色々関わるうえで、構成の理解が重要そうだったので調べをまとめてみる。
まず、基本的なインフラ構成から説明し、その後でwsl -l -vコマンドとDocker Desktopの設定について解説します。
基本的なインフラ構成
- Docker Desktop for Windows + WSL2:
Windows上でDocker Desktopをインストールすると、WSL2上に特別なDocker環境(docker-desktopとdocker-desktop-data)が作成されます。
この構成では、Linuxカーネルのパフォーマンスを活用しつつ、Windows上でDockerをスムーズに動作させることができます。
2. WSL2 + Linux ディストリビューション(例:Ubuntu-20.04):
WSL2を使って、UbuntuなどのLinuxディストリビューションをWindows上で動かすことができます。
Dockerを使用する場合、Linuxディストリビューション上で直接Dockerをインストールし、コンテナを管理することも可能です。
wsl -l -v コマンドについて
このコマンドを使用すると、現在インストールされているWSL2のディストリビューションとその状態が表示されます。*マークは、デフォルトで使用されるディストリビューションを示します。
docker-desktopがデフォルトの場合、Docker関連の操作はすべてDocker Desktop経由で行われます。
例えば、Ubuntu-20.04がデフォルトの場合、通常のLinuxコマンドライン操作やDockerコマンドはこのディストリビューション内で実行されます。
Docker Desktopの設定について
General設定:
"use the WSL 2 based engine"がONになっていると、Docker DesktopはWSL2をバックエンドとして使用します。
Resources -> WSL Integration設定:
"Enable integration with my default WSL distro"がONの場合、デフォルトのWSLディストリビューションとDocker Desktopが連携します。
特定のLinuxディストリビューションに対しては、個別に連携のON/OFFを設定できます。
VSCodeからWSLへの接続
VSCodeのリモートコンテナ機能を使用すると、Dockerコンテナ内でコードを開発することができます。
この機能を使用するためには、WSL2上にLinuxディストリビューションがインストールされている必要はありません。Docker DesktopのWSL Integration機能が有効であれば、Windows上の任意のディレクトリでコンテナを起動し、それをVSCodeで操作することが可能です。