10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VSCodeのDocker拡張機能で Failed to connect. Is Docker installed and running? エラーになる場合の対処法

Last updated at Posted at 2020-08-16

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コマンドの実行が可能になります。

  1. dockerグループの作成 $ sudo groupadd docker
  2. ユーザをdockerグループに追加 $ sudo usermod -aG docker $USER
  3. グループへの変更を適用 $ newgrp docker
  4. sudoなしでコマンドが実行できるか確認 $ docker run hello-world

リモートアクセスの構成

WSLではsystemdは素直には利用できない1のでdaemon.jsonによりリモートアクセスを構成します。

  1. /etc/docker/daemon.jsonファイルを作成する。(/etc/dockerディレクトリは存在しないはずなので手動作成。)

  2. 作成したdaemon.jsonに下記を記述

    /etc/docker/daemon.json
    {
      "hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"]
    }
    
  3. Ubuntuを再起動

  4. 動作確認

    $ 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の操作と拡張機能からの接続が行えるようになりました。

参考

  1. 最新のWSLではsystemdが公式にサポートされています。
    Systemd support is now available in WSL! - Windows Command Line

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?