エラーの発生状況
.devcontainerの設定を終え、いよいよコードを書き始める準備が整いました。青い「Reopen in Container(コンテナーで再度開く)」ボタンをクリックし、スムーズに移行できることを期待します。しかし、進行状況バーが止まり、ターミナルのエラーによってビルドプロセスが突然終了してしまいます。
ログを詳しく見てみると、原因が判明します:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
この問題は、UbuntuなどのLinuxディストリビューションや、WSL2を使用しているWindows開発者によく見られます。これは実質的に、VS Codeがローカルパイプ(Unixソケット)を介してDockerと通信しようとしているものの、接続が拒否されているか、パイプがロックされていることを意味します。
原因分析:なぜこのエラーが発生するのか?
通常、この問題は以下の3つの一般的な設定不備のいずれかに集約されます:
- サービスがオフライン: Dockerのバックグラウンドプロセス(デーモン)がホストマシンで実行されていません。
- 「ゲートキーパー」問題: ユーザーアカウントに
/var/run/docker.sockへの読み書き権限がありません。デフォルトでは、このソケットの所有者はrootです。 - WSL2ブリッジの失敗: Windowsにおいて、Docker Desktopが特定のWSL2 Linuxディストリビューションとエンジンを共有するように許可されていない可能性があります。
ステップ1:Dockerデーモンのステータスを確認する
複雑な権限の修正に取り掛かる前に、エンジンが実際に起動しているか確認しましょう。ターミナルで次のコマンドを実行します:
sudo systemctl status docker
出力にinactive (dead)と表示されている場合は、起動させる必要があります。以下のコマンドを使用してサービスを開始し、コンピュータの起動時に毎回自動的に実行されるように設定します:
sudo systemctl start docker
sudo systemctl enable docker
ステップ2:ユーザーをDockerグループに追加する
Linuxでは、Dockerの実行にroot権限が必要です。すべてのコマンドの先頭にsudoを付ける代わりに、dockerグループに参加するのが標準的な方法です。これにより、VS Codeがソケットにアクセスするために必要な「鍵」が得られます。
- dockerグループがまだ存在しない場合は作成します:
sudo groupadd docker
- 現在のユーザー(`$USER`)をこのグループに追加します:
```
sudo usermod -aG docker $USER
- 重要: グループの変更は、アクティブなセッションには適用されません。OSからログアウトして再度ログインする必要があります。WSL2を使用している場合は、Windows PowerShellウィンドウで
wsl --shutdownを実行して強制的にリセットしてください。
ログアウトせずに一時的な修正が必要ですか?その場合は、ターミナルでnewgrp dockerを実行してください。これはその特定のターミナルタブにのみ影響するため、VS Codeの安定性の面ではフルリスタートを行うのがベストです。
ステップ3:ソケットの権限を調整する(クイックワークアラウンド)
グループへの参加で問題がすぐに解決しない場合は、手動でソケットの権限を開放することができます。マルチユーザーシステムではセキュリティが若干低下しますが、ローカル開発環境では非常に効果的な修正方法です。
sudo chmod 666 /var/run/docker.sock
このコマンドは、すべてのユーザーに読み書きのアクセス権を付与します。システムのアップデートやDockerの再起動によって、このファイルの権限がデフォルトの660に戻ることがあるので注意してください。
ステップ4:WindowsでWSL2統合を設定する
Windowsユーザーの場合、Docker Desktopは実行されているものの、Linuxサブシステムと「通信」できていないときにこのエラーがよく発生します。
- Docker Desktopのダッシュボードを開きます。
- Settings(歯車アイコン) > Resources > WSL Integrationに移動します。
- 「Enable integration with my default WSL distro」がオンになっていることを確認します。
- リストから特定のディストリビューション(例:「Ubuntu-22.04」)を見つけ、スイッチをOnに切り替えます。
- Apply & Restartをクリックします。
ステップ5:VS Codeのパス設定を確認する
まれに、VS Codeが間違ったディレクトリでDockerの実行ファイルを探していることがあります。設定(Ctrl + ,)を開き、docker.pathを検索してください。「Dev Containers: Docker Path」フィールドが空(デフォルトのdocker)であるか、Dockerバイナリの有効なパスを指していることを確認してください。
検証:修正を確認する
すべてが正常に動作していることを確認するために、新しいターミナルを開いて次を実行します:
docker ps
sudoを使わずに、CONTAINER IDやIMAGEといったヘッダーを持つテーブルが表示されれば成功です。VS Codeに戻り、「Try Again」をクリックしてください。これでDev Containerがベースイメージをプルし、エラーなくビルドを開始するはずです。

