はじめに

WindowsでClaude Codeを使ったAI駆動開発を実践すべく、環境構築をするなかでハマったエラーの対処法を備忘録として記録します。

環境情報

  • Windows 11
  • WSL 2.6.1.0
  • RancherDesktop 1.20.0

問題の発生

WSL上でVSCodeのDevContainerビルド中に以下のようなエラーが発生しました。apt-get update がDebianのリポジトリに接続できていないことがわかります。

<br />W: Failed to fetch http://deb.debian.org/debian/dists/trixie/InRelease Unable to connect to deb.debian.org:80:
...
process "/bin/sh -c apt-get -qq -y update" did not complete successfully: exit code: 100

コンテナの中からインターネット、特に deb.debian.org というホストへの接続に失敗しているようです。

原因の切り分け

まずコンテナの親であるWSL2環境自体のネットワークを調査します。WSLのターミナルで以下のコマンドを実行します。

1. IPアドレスへの疎通確認

ping 8.8.8.8

これは成功しました。IPレベルでの通信はできているようです。

2. ホスト名での疎通確認

curl http://deb.debian.org

これは Could not resolve host: deb.debian.org というエラーで失敗しました。

この結果から、WSL2環境のDNS名前解決が失敗していることが分かります。
IPアドレスはわかるけれど、ドメイン名(deb.debian.org)をIPアドレスに変換できていない状態です。
WSLはWindowsのネットワーク設定を自動で引き継ぎますが、この連携がうまくいかないことが時々あるようです。

解決策の模索

WSLホストのDNS問題を解決するため、/etc/wsl.conf/etc/resolv.conf を手動で設定する方法を試しました。
これにより、WSLホスト自体(curlコマンドなど)はインターネットに接続できるようになりました。
このあたりの設定は、関連記事が割とありました。

しかし、それでもDev Containerのビルドは同じエラーで失敗します。

「WSLホストのネットワーク」と「Dockerデーモン(コンテナ)が使用するネットワーク」は別物として扱われていそうです。
WSLホストのDNS設定を修正しただけでは、Rancher Desktopが管理するDockerデーモンにはその変更が伝わっていないさそう、ということで。。

解決策

紆余曲折を経ましたが、最終的に以下の2つの手順で解決できました。

1. Rancher Desktopの初期化 (Factory Reset)

Rancher Desktopが保持している可能性のある、壊れたネットワーク設定やキャッシュを完全に消去するため、Factory Reset を行いました。
Rancher DesktopのUIから実行でき、これによりクリーンな状態で再起動できます。

2. daemon.jsonでDockerデーモンにDNSを明示的に指定

次に、Dockerデーモンが起動時に必ず正しいDNSサーバーを参照するように、設定ファイルを作成・編集します。

  1. WSLのホームディレクトリ(例: /home/your-user/)に移動します。
  2. .docker というディレクトリがなければ作成します (mkdir .docker)。
  3. その中に daemon.json というファイルを作成し、以下の内容を記述します。
{
  "dns": ["8.8.8.8", "1.1.1.1"]
}

この状態で初期化されたRancher Desktopを起動したところ、daemon.json の設定が正しく読み込まれ、無事にDev Containerのビルドが成功しました。

まとめ

今回の問題の根本原因は、WSLの自動ネットワーク設定とRancher Desktop(Dockerデーモン)の間でのDNS情報の連携不全でした。
Rancher Desktopを初期化することで、内部に溜まっていた不正な設定をすべてクリアし、~/.docker/daemon.json にDNS設定を明記することで、Dockerデーモンに「迷わずこのDNSを利用せよ」と指示することができました。

Windows環境でAI駆動開発をする際には環境構築に苦慮することが多いと思いますが、この記事が少しでも助けになれば幸いです。