Docker Desktop for WindowsをWSL2のUbuntuから利用した際、リモート接続したVSCodeのDocker拡張機能から接続できない場合の対処法について。
環境
- ホストOS:Windows 10
- ゲストOS:Ubuntu 20.04(WSL2)
- Docker:Docker Desktop for Windows(version 19.03.12, build 48a66213fe)
- ダッシュボードの設定の
- General > Expose daemon on tcp://localhost:2375 without TLS:無効(チェックなし)
- Resources > WSL Integration:開発環境のあるUbuntuに対して有効
- UbuntuにDockerはインストールされていない
- 開発環境はUbuntuのファイルシステム上にある
- ダッシュボードの設定の
- VSCode:v1.48.0
- Docker拡張機能(Ubuntuにインストール、v1.4.1)
発生したエラー
Docker拡張機能のビューで
Failed to connect. Is Docker installed and running? (ECONNREFUSED 127.0.0.1:2375)
解決法
Docker拡張機能のREADMEによれば
On Linux, you should enable rootless Docker and set the generated Docker context to "rootless" (more secure) or enable Docker CLI for the non-root user account (less secure) that will be used to run VS Code.
とあるので、Post-installation steps for Linux - Docker Documentationにしたがって
を行います。
記事執筆時点(2020/08/16)のREADMEではRootlessモードを利用したDockerの構成方法がなく、記事の更新にあたって検証もできていないため非rootユーザーで実行する方法で説明しています。これから対処される場合は以降に示す方法ではなくRootlessモードの利用が推奨されます。
Dockerの非rootユーザの実行許可
ドキュメントのとおりやるだけ。これによりsudoなしでdockerコマンドの実行が可能になります。
-
dockerグループの作成$ sudo groupadd docker - ユーザを
dockerグループに追加$ sudo usermod -aG docker $USER - グループへの変更を適用
$ newgrp docker -
sudoなしでコマンドが実行できるか確認$ docker run hello-world
リモートアクセスの構成
WSLではsystemdは素直には利用できない1のでdaemon.jsonによりリモートアクセスを構成します。
-
/etc/docker/daemon.jsonファイルを作成する。(/etc/dockerディレクトリは存在しないはずなので手動作成。) -
作成した
daemon.jsonに下記を記述/etc/docker/daemon.json{ "hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"] } -
Ubuntuを再起動
-
動作確認
$ sudo ss | grep docker u_str ESTAB 0 0 /run/guest-services/docker.sock 367124 * 330544 u_str ESTAB 0 0 /run/guest-services/docker.sock 367126 * 330545 u_str ESTAB 0 0 /run/guest-services/docker.sock 307037 * 309995 u_str ESTAB 0 0 /run/guest-services/docker.sock 305761 * 316051 u_str ESTAB 0 0 /run/guest-services/docker.sock 305703 * 386143 u_str ESTAB 0 0 /run/guest-services/docker.sock 305701 * 386142
トラブルシューティング
Ubuntuで何も設定していない状態なら、上記までの手順でDocker拡張機能から接続できるようになると思います。
ターミナルからdockerコマンドを実行して、Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?エラーが表示される場合は環境変数を削除する必要があります。
-
~/.bashrcや~/.profileなどの該当箇所の削除 - VSCodeの設定の
docker.hostを削除
を行います。私の場合はtcp://127.0.0.1:2375を設定していましたが、これらを削除したことにより問題なくDockerの操作と拡張機能からの接続が行えるようになりました。
参考
-
最新のWSLではsystemdが公式にサポートされています。
Systemd support is now available in WSL! - Windows Command Line ↩